成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

vb.net動(dòng)態(tài)加載控件 vb動(dòng)態(tài)添加控件并綁定事件

vb.net 動(dòng)態(tài)添加大量控件嚴(yán)重卡頓怎么辦

這是不可避免的,除非更換電腦硬件,讓處理器及內(nèi)存處理得更快,或是不要用自帶的 Panel 和 Label 控件,自定義一個(gè)容器,內(nèi)容自繪。

為潁泉等地區(qū)用戶(hù)提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及潁泉網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都做網(wǎng)站、成都網(wǎng)站建設(shè)、潁泉網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶(hù)提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶(hù)的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

卡頓主要原因:

1、控件多了,電腦必然會(huì)慢,因?yàn)樵?Windows 里每個(gè)控件都相當(dāng)于一個(gè)窗口,有自己的句柄,系統(tǒng)需要維護(hù)對(duì)應(yīng)的窗口消息,那么一定會(huì)卡頓,只能緩解不能消除。

2、可以用多線(xiàn)程,在子線(xiàn)程中更新控件,通過(guò)委托的方式通知主線(xiàn)程,可以有效緩解卡頓的問(wèn)題。

(vb.net)動(dòng)態(tài)添加的控件如何多次響應(yīng)事件?

熟悉VB的朋友對(duì)使用ActiveX控件一定不會(huì)陌生,眾多控件極大地方便了編程,但

唯一的缺陷是不能動(dòng)態(tài)加載控件,必須在設(shè)計(jì)時(shí)通過(guò)引用,將控件放置在窗體上。

VB6.0已能夠解決該問(wèn)題,只是幫助中沒(méi)有明確說(shuō)明,并且沒(méi)有描述到一些關(guān)鍵功能,

由于以前的版本中可以動(dòng)態(tài)創(chuàng)建進(jìn)程外服務(wù):如果對(duì)象是外部可創(chuàng)建的,可在 Set 語(yǔ)

句中用 New 關(guān)鍵字、CreateObject 或 GetObject 從部件外面將對(duì)象引用賦予變量。

如果對(duì)象是從屬對(duì)象,則需使用高層對(duì)象的方法,在 Set 語(yǔ)句中指定一個(gè)對(duì)象引用:

Dim xlApp1 As Excel.Application

Set xlApp1 = New Excel.Application

Dim xlApp As Object '定義存放引用對(duì)象的變量。

Set xlApp = CreateObject("excel.application")

xlApp.Visible = True

---- 這些語(yǔ)法很容易造成誤導(dǎo),以為動(dòng)態(tài)加載ActiveX控件也是此方法,可能有朋友也

象我一樣利用CreateObject嘗試了無(wú)數(shù)次,卻無(wú)功而返,不知微軟公司是出于何種考

慮,動(dòng)態(tài)加載ActiveX控件是擴(kuò)展控件集合的方式實(shí)現(xiàn),通過(guò)實(shí)際摸索,終于就如何實(shí)

現(xiàn)動(dòng)態(tài)ActiveX控件找出了一條切實(shí)可行的方法,下面以一個(gè)具體的實(shí)例來(lái)詳細(xì)說(shuō)明。

一、ActiveX控件

---- ActiveX 控件是 Visual Basic 工具箱的擴(kuò)充部分。使用 ActiveX 控件的方法與

使用其它標(biāo)準(zhǔn)內(nèi)裝的控件,如 CheckBox 控件,完全一樣。在程序中加入 ActiveX 控

件后,它將成為開(kāi)發(fā)和運(yùn)行環(huán)境的一部分,并為應(yīng)用程序提供新的功能。

---- ActiveX 部件通過(guò)客戶(hù)端/服務(wù)器關(guān)系與應(yīng)用程序— 及與部件相互之間— 交互作

用??蛻?hù)端是使用部件功能的應(yīng)用程序代碼或部件。服務(wù)器是部件及其關(guān)聯(lián)的對(duì)象。例

如,假設(shè)應(yīng)用程序使用 ActiveX 控件來(lái)提供一個(gè)標(biāo)準(zhǔn)的雇員窗體,供公司的多種應(yīng)用

程序使用。提供雇員窗體的 ActiveX 控件就是服務(wù)器,使用這個(gè)控件的應(yīng)用程序就是

服務(wù)器的客戶(hù)端。

二、加載方法

---- VB6.0中對(duì)Controls 集合進(jìn)行了擴(kuò)展,以前版本中Controls 集合在窗體上列舉出

已加載的控件,這在迭代過(guò)程中是很有用的。Controls 集合標(biāo)識(shí)一個(gè)叫做 Controls

的內(nèi)在窗體級(jí)變量。如果忽略可選的 object 所在處的整數(shù),則關(guān)鍵字 Controls 必須

包括在內(nèi)。我們通常在窗口中使用如下代碼:

Text1.Text="Hello, world"

其實(shí)也可以使用如下代碼達(dá)到同一目的:

Controls(1).Text="Hello, world"

---- 在VB6.0中除了原來(lái)的Clear、Remove 方法外(很奇怪,為什么微軟在VB5.0中只提

供這兩種方法,而沒(méi)有提供Add方法,因?yàn)闆](méi)有Add,這兩種方法也就沒(méi)什么用處),增

加了Add方法,該方法就是用于動(dòng)態(tài)加載控件的:

Controls.Add(progid as String, Name as String);

progid: ActiveX部件的ProgID,如:"VB.CheckBox";

Name:ActiveX部件加載后的名稱(chēng),如: "MyCheckBox";

若要在窗體上添加一個(gè)名為MyButton的按鈕,可以使用:

dim oControl as Object '窗體級(jí)變量

注意:這里聲明為Object對(duì)象類(lèi)型

Private Sub LoadControl()

Set oControl = Controls.Add

("VB.CommandButton", "MyButton")

oControl.Left = 10

oControl.Top = 10

oControl.Visible = True '使控件可見(jiàn)

End Sub

---- 這是VB6.0的標(biāo)準(zhǔn)語(yǔ)法,它在例程中也是如此演示的,不過(guò)該方法雖然現(xiàn)實(shí)了控件

的動(dòng)態(tài)加載,按鈕顯示在窗體上,可以象普通按鈕一樣按下去,但加載的控件不能預(yù)先

設(shè)計(jì)響應(yīng)事件代碼,如:事件Sub MyButton_Click()將是非法的,當(dāng)然,可以將要響應(yīng)

的事件封裝在控件內(nèi)部。就編程的觀(guān)點(diǎn)來(lái)看該方法沒(méi)什么大的用處,開(kāi)發(fā)ActiveX控件

的目的是為了資源共享,為了被其他開(kāi)發(fā)人員利用,所以要提供必要的事件接口,顯然

利用該方法不行,通過(guò)分析VBControls等相關(guān)對(duì)象,找出VBControlExtender對(duì)象與

EventInfo相結(jié)合能提供事件陷井捕捉,VBControlExtender對(duì)象對(duì)動(dòng)態(tài)添加控件特別有

用,它提供了一套通用的屬性、方法、事件給開(kāi)發(fā)人員,它的一個(gè)突出特點(diǎn)是能編程設(shè)

計(jì)控件的事件,熟習(xí)類(lèi)編程的朋友對(duì)帶事件的對(duì)象聲明一定不會(huì)陌生:

---- Dim WithEvents objElemt as CElemtVBControlExtender也不例外,聲明的語(yǔ)法

一樣,只不過(guò)它有個(gè)特殊的事件ObjectEvent(Info As EventInfo),它能捕捉到對(duì)象使

用RaiseEvent產(chǎn)生的所有事件,EventInfo數(shù)據(jù)結(jié)構(gòu)映射了事件的名稱(chēng)、參數(shù)個(gè)數(shù)和參

數(shù)的值。VBControlExtender和 EventInfo相結(jié)合,采用Select Case 就可以預(yù)先將不

同類(lèi)對(duì)象的事件放置一起,各自獨(dú)立運(yùn)作。將上面的代碼改寫(xiě)一下就能提供Click事件

了:

---- Dim WithEvents oControl As VBControlExtender '帶事件聲明聲明之后您就可

以在代碼窗口的左上角的對(duì)象下拉框中發(fā)現(xiàn)該對(duì)象出現(xiàn)了,也就是說(shuō),該對(duì)象有了事件

或方法了,它的事件有DragDrop,DragOver ,LostFocus ,GotFocus ,ObjectEvent

和Validate,其中ObjectEvent是通用的事件捕捉。

Private Sub LoadControl()

Set oControl = Controls.Add

("VB. CommandButton", "MyButton")

oControl.Visible = True

End Sub

Private Sub oControl_ObjectEvent(Info As EventInfo)

Select Case Info.Name

Case "Click" 'Click事件

'您可以添加處理Click事件代碼

MsgBox "您按了MyButton!"

Case Else ' 其他事件

' Handle unknown events here.

End Select

End Sub

---- 當(dāng)然對(duì)微軟提供的標(biāo)準(zhǔn)控件能采用該方法添加,大家都不會(huì)懷疑,但自己開(kāi)發(fā)的

控件也能嗎?答案是肯定的,我們可以用一個(gè)實(shí)際的例子進(jìn)行說(shuō)明。

vb.net 如何區(qū)分動(dòng)態(tài)加載相同控件的事件處理,如加載了兩個(gè)combox,添加事件后如何區(qū)分選擇了其中哪一個(gè)

就算有兩個(gè)combox也是不能同名的。

不會(huì)觸發(fā)同一個(gè)事件,兩個(gè)事件分開(kāi)寫(xiě)所以沒(méi)必要去區(qū)分,相同的部分寫(xiě)到一個(gè)過(guò)程里面來(lái)調(diào)用,就算區(qū)分也可以通過(guò)獲取焦點(diǎn)在哪里來(lái)判斷。

如何在vb.net里面動(dòng)態(tài)添加控件

Private WithEvents NewTextBox As TextBox

'通過(guò)使用WithEvents關(guān)鍵字聲明一個(gè)對(duì)象變量為新的命令按鈕

Private Sub Command1_Click()

If NewTextBox Is Nothing Then

Set NewTextBox = Controls.Add("VB.TextBox", "cmdNew", Form1)

NewTextBox.Move 200, 200

NewTextBox.Width = Form1.Width - 450

NewTextBox.Height = Form1.Height - 1400

NewTextBox.Visible = True

End If

End Sub

Private Sub Command2_Click()

If NewTextBox Is Nothing Then

Exit Sub

Else

Controls.Remove NewTextBox

Set NewTextBox = Nothing

End If

End Sub

網(wǎng)頁(yè)名稱(chēng):vb.net動(dòng)態(tài)加載控件 vb動(dòng)態(tài)添加控件并綁定事件
鏈接地址:http://jinyejixie.com/article34/dosggse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、手機(jī)網(wǎng)站建設(shè)、面包屑導(dǎo)航標(biāo)簽優(yōu)化、App設(shè)計(jì)響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)
肇州县| 仙游县| 德江县| 百色市| 普洱| 青阳县| 翁源县| 无棣县| 哈巴河县| 东阳市| 卢氏县| 济阳县| 双城市| 昔阳县| 阳朔县| 商水县| 泰兴市| 平安县| 邹城市| 辛集市| 古丈县| 塘沽区| 卓资县| 田林县| 六盘水市| 南丰县| 秦安县| 定兴县| 盱眙县| 温宿县| 蛟河市| 勃利县| 洞头县| 巴彦县| 郎溪县| 盖州市| 盐城市| 辽宁省| 西畴县| 郴州市| 清水河县|