這個(gè)沒(méi)法做到。原因
成都創(chuàng)新互聯(lián)網(wǎng)絡(luò)公司擁有十載的成都網(wǎng)站開(kāi)發(fā)建設(shè)經(jīng)驗(yàn),上1000+客戶(hù)的共同信賴(lài)。提供成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、網(wǎng)站開(kāi)發(fā)、網(wǎng)站定制、外鏈、建網(wǎng)站、網(wǎng)站搭建、成都響應(yīng)式網(wǎng)站建設(shè)公司、網(wǎng)頁(yè)設(shè)計(jì)師打造企業(yè)風(fēng)格,提供周到的售前咨詢(xún)和貼心的售后服務(wù)
1)當(dāng)你將方法排入線(xiàn)程池隊(duì)列后,此方法在有線(xiàn)程池線(xiàn)程變得可用時(shí)執(zhí)行。
2)線(xiàn)程池中某個(gè)線(xiàn)程的可用與不可用,是由.net 后臺(tái)決定,用戶(hù)程序無(wú)法控制的
3)正如你觀察到的:線(xiàn)程啟動(dòng)的時(shí)間不同,有快有慢,這恰恰說(shuō)明線(xiàn)程池起作用了:線(xiàn)程池的調(diào)度試圖讓程序響應(yīng)達(dá)到最佳。
名稱(chēng)
說(shuō)明
Activated
當(dāng)使用代碼激活或用戶(hù)激活窗體時(shí)發(fā)生。
AutoSizeChanged
當(dāng)?AutoSize?屬性更改時(shí)發(fā)生。
AutoValidateChanged
當(dāng)?AutoValidate?屬性更改時(shí)發(fā)生。
BackColorChanged
當(dāng)?BackColor?屬性的值更改時(shí)發(fā)生。(從?Control?繼承。)
BackgroundImageChanged
當(dāng)?BackgroundImage?屬性的值更改時(shí)發(fā)生。(從?Control?繼承。)
BackgroundImageLayoutChanged
當(dāng)?BackgroundImageLayout?屬性更改時(shí)發(fā)生。(從?Control?繼承。)
BindingContextChanged
當(dāng)?BindingContext?屬性的值更改時(shí)發(fā)生。(從?Control?繼承。)
CausesValidationChanged
當(dāng)?CausesValidation?屬性的值更改時(shí)發(fā)生。(從?Control?繼承。)
ChangeUICues
焦點(diǎn)或鍵盤(pán)用戶(hù)界面 (UI) 提示更改時(shí)發(fā)生。(從?Control?繼承。)
Click
在單擊控件時(shí)發(fā)生。(從?Control?繼承。)
ClientSizeChanged
當(dāng)?ClientSize?屬性的值更改時(shí)發(fā)生。(從?Control?繼承。)
Closed
關(guān)閉窗體時(shí)發(fā)生。
Closing
關(guān)閉窗體時(shí)發(fā)生。
ContextMenuChanged
當(dāng)?ContextMenu?屬性的值更改時(shí)發(fā)生。(從?Control?繼承。)
ContextMenuStripChanged
當(dāng)?ContextMenuStrip?屬性的值更改時(shí)發(fā)生。(從?Control?繼承。)
ControlAdded
在將新控件添加到?Control.ControlCollection?時(shí)發(fā)生。(從?Control?繼承。)
ControlRemoved
在從?Control.ControlCollection?移除控件時(shí)發(fā)生。(從?Control?繼承。)
CursorChanged
當(dāng)?Cursor?屬性的值更改時(shí)發(fā)生。(從?Control?繼承。)
Deactivate
當(dāng)窗體失去焦點(diǎn)并不再是活動(dòng)窗體時(shí)發(fā)生。
Disposed
當(dāng)通過(guò)調(diào)用?Dispose?方法釋放組件時(shí)發(fā)生。(從?Component?繼承。)
DockChanged
當(dāng)?Dock?屬性的值更改時(shí)發(fā)生。(從?Control?繼承。)
DoubleClick
在雙擊控件時(shí)發(fā)生。(從?Control?繼承。)
DragDrop
拖放操作完成時(shí)發(fā)生。(從?Control?繼承。)
DragEnter
在將對(duì)象拖入控件的邊界時(shí)發(fā)生。(從?Control?繼承。)
DragLeave
將對(duì)象拖出控件的邊界時(shí)發(fā)生。(從?Control?繼承。)
DragOver
在將對(duì)象拖到控件的邊界上發(fā)生。(從?Control?繼承。)
EnabledChanged
在?Enabled?屬性值更改后發(fā)生。(從?Control?繼承。)
Enter
進(jìn)入控件時(shí)發(fā)生。(從?Control?繼承。)
FontChanged
在?Font?屬性值更改時(shí)發(fā)生。(從?Control?繼承。)
ForeColorChanged
在?ForeColor?屬性值更改時(shí)發(fā)生。(從?Control?繼承。)
FormClosed
關(guān)閉窗體后發(fā)生。
FormClosing
關(guān)閉窗體前發(fā)生。
GiveFeedback
在執(zhí)行拖動(dòng)操作期間發(fā)生。(從?Control?繼承。)
GotFocus
在控件接收焦點(diǎn)時(shí)發(fā)生。(從?Control?繼承。)
HandleCreated
在為控件創(chuàng)建句柄時(shí)發(fā)生。(從?Control?繼承。)
HandleDestroyed
在控件的句柄處于銷(xiāo)毀過(guò)程中時(shí)發(fā)生。(從?Control?繼承。)
HelpButtonClicked
單擊“幫助”按鈕時(shí)發(fā)生。
HelpRequested
用戶(hù)請(qǐng)求控件幫助時(shí)發(fā)生。(從?Control?繼承。)
ImeModeChanged
在?ImeMode?屬性更改后發(fā)生。(從?Control?繼承。)
InputLanguageChanged
更改窗體的輸入語(yǔ)言后發(fā)生。
InputLanguageChanging
當(dāng)用戶(hù)嘗試更改窗體的輸入語(yǔ)言時(shí)發(fā)生。
Invalidated
控件的顯示要求重新繪制時(shí)發(fā)生。(從?Control?繼承。)
KeyDown
在控件有焦點(diǎn)的情況下按下鍵時(shí)發(fā)生。(從?Control?繼承。)
KeyPress
在控件有焦點(diǎn)的情況下字符、空格或退格鍵時(shí)發(fā)生。(從?Control?繼承。)
KeyUp
在控件有焦點(diǎn)的情況下釋放鍵時(shí)發(fā)生。(從?Control?繼承。)
Layout
在控件應(yīng)重新定位其子控件時(shí)發(fā)生。(從?Control?繼承。)
Leave
在輸入焦點(diǎn)離開(kāi)控件時(shí)發(fā)生。(從?Control?繼承。)
Load
在第一次顯示窗體前發(fā)生。
LocationChanged
在?Location?屬性值更改后發(fā)生。(從?Control?繼承。)
LostFocus
在控件失去焦點(diǎn)時(shí)發(fā)生。(從?Control?繼承。)
MarginChanged
當(dāng)?Margin?屬性更改時(shí)發(fā)生。
MaximizedBoundsChanged
在?MaximizedBounds?屬性的值更改后發(fā)生。
MaximumSizeChanged
在?MaximumSize?屬性的值更改后發(fā)生。
MdiChildActivate
在多文檔界面 (MDI) 應(yīng)用程序內(nèi)激活或關(guān)閉 MDI 子窗體時(shí)發(fā)生。
MenuComplete
當(dāng)窗體菜單失去焦點(diǎn)時(shí)發(fā)生。
MenuStart
當(dāng)窗體菜單接收焦點(diǎn)時(shí)發(fā)生。
MinimumSizeChanged
在?MinimumSize?屬性的值更改后發(fā)生。
MouseCaptureChanged
當(dāng)控件失去鼠標(biāo)捕獲時(shí)發(fā)生。(從?Control?繼承。)
MouseClick
用鼠標(biāo)單擊控件時(shí)發(fā)生。(從?Control?繼承。)
MouseDoubleClick
用鼠標(biāo)雙擊控件時(shí)發(fā)生。(從?Control?繼承。)
MouseDown
當(dāng)鼠標(biāo)指針位于控件上并按下鼠標(biāo)鍵時(shí)發(fā)生。(從?Control?繼承。)
MouseEnter
在鼠標(biāo)指針進(jìn)入控件時(shí)發(fā)生。(從?Control?繼承。)
MouseHover
在鼠標(biāo)指針停放在控件上時(shí)發(fā)生。(從?Control?繼承。)
MouseLeave
在鼠標(biāo)指針離開(kāi)控件時(shí)發(fā)生。(從?Control?繼承。)
MouseMove
在鼠標(biāo)指針移到控件上時(shí)發(fā)生。(從?Control?繼承。)
MouseUp
在鼠標(biāo)指針在控件上并釋放鼠標(biāo)鍵時(shí)發(fā)生。(從?Control?繼承。)
MouseWheel
在控件有焦點(diǎn)且鼠標(biāo)輪移動(dòng)時(shí)發(fā)生。(從?Control?繼承。)
Move
在移動(dòng)控件時(shí)發(fā)生。(從?Control?繼承。)
PaddingChanged
在控件空白區(qū)更改時(shí)發(fā)生。(從?Control?繼承。)
Paint
在重繪控件時(shí)發(fā)生。(從?Control?繼承。)
ParentChanged
在?Parent?屬性值更改時(shí)發(fā)生。(從?Control?繼承。)
PreviewKeyDown
在焦點(diǎn)位于此控件上的情況下,當(dāng)有按鍵動(dòng)作時(shí)發(fā)生(在?KeyDown?事件之前發(fā)生)。(從Control?繼承。)
QueryAccessibilityHelp
在?AccessibleObject?為輔助功能應(yīng)用程序提供幫助時(shí)發(fā)生。(從?Control?繼承。)
QueryContinueDrag
在拖放操作期間發(fā)生,并且允許拖動(dòng)源確定是否應(yīng)取消拖放操作。(從?Control?繼承。)
RegionChanged
當(dāng)?Region?屬性的值更改時(shí)發(fā)生。(從?Control?繼承。)
Resize
在調(diào)整控件大小時(shí)發(fā)生。(從?Control?繼承。)
ResizeBegin
窗體進(jìn)入大小調(diào)整模式時(shí)發(fā)生。
ResizeEnd
窗體退出大小調(diào)整模式時(shí)發(fā)生。
RightToLeftChanged
在?RightToLeft?屬性值更改時(shí)發(fā)生。(從?Control?繼承。)
RightToLeftLayoutChanged
更改?RightToLeftLayout?屬性值之后發(fā)生。
Scroll
用戶(hù)或代碼滾動(dòng)工作區(qū)時(shí)發(fā)生。(從?ScrollableControl?繼承。)
Shown
只要窗體是首次顯示就發(fā)生。
SizeChanged
在?Size?屬性值更改時(shí)發(fā)生。(從?Control?繼承。)
StyleChanged
在控件樣式更改時(shí)發(fā)生。(從?Control?繼承。)
SystemColorsChanged
系統(tǒng)顏色更改時(shí)發(fā)生。(從?Control?繼承。)
TabIndexChanged
此 API 支持 產(chǎn)品 基礎(chǔ)結(jié)構(gòu),不能在代碼中直接使用。?當(dāng)?TabIndex?屬性的值更改時(shí)發(fā)生。
TabStopChanged
當(dāng)?TabStop?屬性更改時(shí)發(fā)生。
TextChanged
在?Text?屬性值更改時(shí)發(fā)生。(從?Control?繼承。)
Validated
在控件完成驗(yàn)證時(shí)發(fā)生。(從?Control?繼承。)
Validating
在控件驗(yàn)證時(shí)發(fā)生。(從?Control?繼承。)
VisibleChanged
在?Visible?屬性值更改時(shí)發(fā)生。(從?Control?繼承。)
每個(gè)按鈕都有一個(gè)唯一的name或者caption吧,用這個(gè)檢測(cè)下就好了。
if sender.name = "按鈕1" then
...
end if
熟悉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)部。就編程的觀點(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ō)明。