不伤头发的染发剂:vb窗体所有事件(4)
来源:百度文库 编辑:偶看新闻 时间:2024/04/19 21:39:25
Change 事件
指示一個控制項的內容已經改變。此事件是如何及何時發生的,則隨控制項的不同而有所差異:
ComboBox - 改變控制項的文字方塊部分的文字。該事件僅在 Style 屬性設定為 0 (Dropdown Combo)或 1 (Simple Combo) 以及當文字被改變,或者藉程式碼改變了 Text 屬性設定時才會發生。
DirListBox - 改變所選擇的目錄。該事件發生在按兩下新目錄,或以程式碼改變 Path 屬性設定時。
DriveListBox - 改變所選擇的磁碟機。該事件發生在選擇了新磁碟機,或以程式碼改變 Drive 屬性設定時。
HScrollBar 和 VScrollBar(水平和垂直捲軸) - 移動捲軸的捲動方塊部份。該事件發生在捲動或以程式碼改變 Value 屬性設定時。
Label - 改變 Label 的內容。該事件發生在 DDE 連結更新資料,或以程式碼改變 Caption 屬性設定時。
PictureBox - 改變 PictureBox 的內容。該事件發生在 DDE 連結更新資料,或以程式碼改變 Picture 屬性設定時。
TextBox - 改變文字方塊的內容。該事件發生在 DDE 連結更新資料、使用者改變文字,或以程式碼改變 Text 屬性設定時。
語法
Private Sub object_Change([index As Integer])
Change 事件語法具有以下幾個單元:
單元 說明
object 一個「適用於」清單中某物件的物件運算式。
index 一個整數,用以辨認在控制項陣列中的一個控制項。
請注意
Change 事件程序可協調在各控制項間顯示的資料,或使它們同步處理。例如,可用一個捲軸的 Change 事件程序,更新一個 TextBox 控制項中捲軸Value 屬性的設定。或者可以利用 Change 事件程序在一個工作區域裡顯示資料和公式,而在另一個區域裡顯示結果。
Change 事件程序在更新檔案系統的控制項(DirListBox,DriveListBox 和 FileListBox)中的各屬性時也是有用的。譬如,可更新一個 DirListBox 控制項 Path 屬性的設定,以反應一 DriveListBox 控制項的 Drive 屬性設定的改變。
注意 一個 Change 事件程序有時會導致一個相關事件。這種情況在控制項的 Change 事件程序改變該控制項的內容時會發生。譬如,透過程式碼去設定一個決定該控制項的值的屬性,比方說,對一個 TextBox 控制項的 Text 屬性之類的設定。若要避免相關事件:
如果可能的話,應避免撰寫會改變該控制項內容的 Change 事件程序。如果撰寫了這種程序,應設定一個旗標來防止在目前進行的事件中,做更進一步的變化。
避免建立兩個或兩個以上 Change 事件程序會相互影響的控制項。例如,兩個 TextBox 控制項在其 Change 事件期間會相互更新。
對 HScrollBar 和 VScrollBar 控制項,應避免在其 Change 事件中使用 MsgBox 函數或陳述式。
回上頁
Click 事件
此事件是發生在按下一個物件,並接著放開滑鼠鍵時。此外也會發生在一個控制項的值改變時。
對 Form 物件來說,該事件會發生在按下空白區域或未啟用之控制項時;對控制項來說,此事件會發生在使用者:
用滑鼠的左鍵或右鍵按一下控制項。對 CheckBox、CommandButton、Listbox 或 OptionButton 控制項來說,Click 事件只會在按一下滑鼠左鍵時引發。
藉由使用方向鍵或按下滑鼠鍵,可選取 ComboBox 或 ListBox 控制項中的項目。
當 CommandButton、OptionButton 或 CheckBox 控制項具有駐點時,按住 SPACEBAR 鍵。
當表單中有 Default 屬性為 True 的 CommandButton 控制項時,按下 ENTER 鍵。
當表單中有 Cancel 按鈕 — Cancel 屬性設定為 True 的 CommandButton 控制項時,按下 ESC 鍵。
按下控制項之對應鍵。例如,如果一個 CommandButton 控制項的標題是「確定(O)」,則按下 ALT+O 可引發此事件。
您也可以在程式碼中引發 Click 事件,透過:
將一個 CommandButton 控制項的 Value 屬性設定為 True。
將一個 OptionButton 控制項的 Value 屬性設定為 True。
改變一個 CheckBox 控制項的 Value 屬性設定。
語法
Private Sub Form_Click( )
Private Sub object_Click([index As Integer])
Click 事件的語法具有以下幾個單元:
單元 說明
object 一個「適用於」清單中某物件的物件運算式。
index 一個整數,用以獨一地辨認在控制項陣列中的一個控制項。
請注意
Click 事件程序常用在 CommandButton 控制項,Menu 物件或 PictureBox 控制項,以執行指令或類似指令的動作。對其它可應用的控制項來說,使用這個事件也可引發一個動作以回應控制項的變化。
從程式碼中,可用一個控制項的 Value 屬性來測試該控制項的狀態。按一下控制項除了會產生 Click 事件外,還會產生 MouseDown 和 MouseUp 事件。這三種事件發生的順序會根據控制項的不同而有所差異。例如,對 ListBox 和 CommandButton
控制項來說,這些事件是按照以下的順序發生的:MouseDown、Click、MouseUp。但對 FileListBox、Label 或 PictureBox 控制項來說,這些事件是依照以下的順序發生:MouseDown、MouseUp 和 Click。設計事件程序時,應先確認它們的動作不會衝突。如果在應用程式中事件順序? 颩垠n的話,則應先對控制項進行測試,確定事件的順序。
附註 若要區別滑鼠的左、中、右按鈕,應使用 MouseDown 和 MouseUp 事件。
如果在 Click 事件中有程式碼,DblClick 事件將不會被引發,因為 Click 事件是先被引發的事件。其結果是按下滑鼠鍵的動作會被 Click 事件攔截,並使 DblClick 事件不會發生。
回上頁
DblClick 事件
當在一個物件上按和放滑鼠按鈕並再次按和放滑鼠按鈕時,該事件發生。
對於表單而言,當按兩下被禁用的控制項或表單的空白區域時,DblClick 事件發生。對於控制項而言,DblClick 事件在以下情形下發生:
用滑鼠左鍵按兩下控制項。
按兩下 Style 屬性設定為 1(Simple) 的 ComboBox 控制項中的項目,或者在 FileListBox , ListBox , DBCombo 或 DBList 控制項中的項目。
語法
Private Sub Form_DblClick ( )
Private Sub object_DblClick (index As Integer)
單元 描述
object 物件運算式,其值是「適用於」清單中的一個物件。
index 如果控制項在控制項陣列.內,就用來識別該控制項。
請注意
如果控制項在一個控制項陣列內,則 Index 引數識別這個控制項。可以使用 DblClick 事件程序執行一個隱藏的作業,如按兩下圖示來開啟一個視窗或文件。也可用這類程序執行單一作業的多個步驟,例如用按兩下在清單方塊中指定一項並關閉對話方塊。
要在 Visual Basic 中產生這類快速效果,可以使用帶有預設按鈕的清單方塊的或疊層排列檔案清單方塊的 DblClick 事件程序;所謂預設按鈕就是 Default 屬性設定為 True 的 CommandButton 控制項。作為清單方塊 DblClick 事件程序的一部份,只需簡單呼叫預設按鈕的 Click 事件。
對於那些接收 Mouse 事件的物件,事件按這樣的次序發生:MouseDown, MouseUp, Click, DblClick 和 MouseUp。
如果 DblClick 在系統按兩下時間限制內沒有出現,則物件識別另一個 Click 事件。按兩下時間限制可以變化,因為使用者可在控制台設定按兩下的速度。當與這些相關事件程序打交道時,必須確保它們的活動不發生衝突。不接受 DblClick 事件的控制項可能接受兩次按一下而不是 DblClick 事件。
附註 要想區別滑鼠的左、右、中按鈕,使用 MouseDown 和 MouseUp 事件。
如果在 Click 事件中有程式碼,DlbClick 事件將永遠不會觸發。
回上頁
DragDrop 事件
該事件發生在完成一個拖放動作(就是將一個控制項拖曳到一個物件上,並釋放滑鼠鍵);或使用 Drag 方法,且其 action 參數設定為 2 (Drop)時。
語法
Private Sub Form_DragDrop(source As Control, x As Single, y As Single)
Private Sub MDIForm_DragDrop(source As Control, x As Single, y As Single)
Private Sub object_DragDrop([index As Integer,]source As Control, x As Single, y As Single)
DragDrop 事件語法具有以下幾個單元:
單元 說明
object 一個「適用於」清單中某物件的物件運算式。
index 一個整數,用以辨認在控制項陣列中的一個控制項。
source 被拖曳的控制項。可用此參數將屬性和方法包括在事件的程序中 — 例如,Source.Visible = 0。
x, y 是一個指定目前滑鼠指標在接收端表單或控制項中水平 (x) 和垂直 (y) 位置的數字。這些座標值通常用接收端的座標系統來表示,該座標是以 ScaleHeight、ScaleWidth、ScaleLeft 和 ScaleTop 屬性來設定的。
請注意
DragDrop 事件程序是用來控制在拖曳動作完成時將會發生的情況。例如,可將來源控制項移到一個新的位置,或將檔案從一個位置複製到另一個位置。
當 source 參數中可能使用多個控制項時:
使用有 If 陳述式的 TypeOf 關鍵字,來確定用 source 的控制項的型態。
使用該控制項的 Tag 屬性來標認一控制項,並接著使用 DragDrop 事件程序。
附註 使用 DragMode 屬性和 Drag 方法來指定拖曳起始的方式。開始拖曳後,可使用 DragOver 事件程序來處理位於 DragDrop 事件之前的事件。
回上頁
DragOver 事件
它發生在拖放動作進行時。可使用此事件對滑鼠指標在一個有效目標上的進入、離開或停留等進行監視。滑鼠指標的位置將決定接收此事件的目標物件。
語法
Private Sub Form_DragOver(source As Control, x As Single, y As Single, state As Integer)
Private Sub MDIForm_DragOver(source As Control, x As Single, y As Single, state As Integer)
Private Sub object_DragOver([index As Integer,]source As Control, x As Single, y As Single, state As Integer)
DragOver 事件語法具有以下幾個單元:
單元 說明
object 一個「適用於」清單中某物件的物件運算式。
index 一個整數,用以辨認在控制項陣列中的一個控制項。
source 正在被拖曳的控制項。可用此參數在事件程序中引用各屬性和方法 — 例如, Source.Visible = False。
x, y 是一個指定目前滑鼠指標在接收端表單或控制項中,水平 (x) 和垂直(y)位置的數字。這些座標值通常用接收端的座標系統來表示,該座標係透過 ScaleHeight、ScaleWidth、ScaleLeft 和 ScaleTop 屬性而設定的。
state 一個整數,對應於一個控制項相對於接收端表單或控制項在拖曳的轉變狀態:
0 = 移入(來源控制項正向一個目標範圍內拖曳)。
1 = 離去(來源控制項正向一個目標範圍外拖曳)。
2 = 跨越(來源控制項在目標範圍內從一個位置移到了另一位置)。
請注意
使用 DragOver 事件程序,可決定出在拖曳開始後和控制項放在目標上之間發生什麼事。例如,您可透過反白目標(由程式碼設定 BackColor 或 ForeColor 屬性)或者顯示一特定的拖曳指標(由程式碼設定 DragIcon 或 MousePointer 屬性),來檢驗有效的目標範圍。
使用 state 參數可決定一些關鍵轉變點的動作。例如,當 state 的設定為 0(移入)時,將可能的目標反白;而當 state 的設定為 1(離去)時,可回復該物件先前的外觀。
在 state 的設定為 0(移入),而物件接收到 DragOver 事件時:
如果來源控制項放在該物件上,則該物件就接收一個 DragDrop 事件。
如果來源控制項沒有放在該物件上,則當 state 的設定為 1(離去)時,該物件就接收另一個 DragOver 事件。
附註 使用 DragMode 屬性和 Drag 方法可指定拖曳起始的模式。關於 source 參數的使用技巧,請參閱 DragDrop 事件描述主題部份。
回上頁
DropDown 事件
該事件發生在 ComboBox 控制項的清單部份正要放下的時候;如果 ComboBox 控制項的 Style 屬性設定為 1(Simple Combo)時,則此事件不會發生。
語法
Private Sub object_DropDown([index As Integer])
DropDown 事件的語法具有以下幾個單元:
單元 說明
object 一個「適用於」清單中某物件的物件運算式。
index 一個整數,用以辨認在控制項陣列中的一個控制項。
請注意
DropDown 事件程序可以在使用者選取之前,對 ComboBox 清單進行最後的各種更新。這可以讓您用 AddItem 或 RemoveItem 方法從該清單新增或刪除項目。在需要控制項間有相互作用時,這種靈活性是很有用的。例如,要根據在 OptionButton 群組中的選擇,決定載入到 ComboBox 清單的內容時,就可以利用該事件。
回上頁
Error 事件
僅在未執行 Visual Basic 程式碼,且產生資料存取的錯誤時,才發生此事件。
語法
Private Sub object_Error ([index As Integer,] dataerr As Integer, response As Integer)
Error 事件的語法具有以下幾個單元:
單元 描述
object 物件運算式,指定「適用於」清單中的物件。
index 控制項陣列,可用來識別控制項。
dataerr 錯誤代碼
response 對應您所希望回應的代碼,細節詳述於「設定」中。
設定
Response 的設定有:
常數 值 說明
vbDataErrContinue 0 繼續。
vbDataErrDisplay 1 (預設值)顯示錯誤訊息。
請注意
這些常數會列示在「瀏覽物件」的 Visual Basic(VB)物件程式庫中。
通常在執行階段中提供處理錯誤的功能。然而,當有下列情形時,即使沒有程式碼正在執行,也會發生執行階段的錯誤:
使用者按下 Data 控制項按鈕。
Data 控制項自動開啟資料庫,並且在 Form_Load 事件後載入 Recordset 物件。
自訂控制項執行一些諸如 MoveNext 方法、AddNew 方法或 Delete 方法 等動作。
若錯誤起因於上述動作時,則會產生 Error 事件。
如果未對 Error 事件編寫事件程序時,Visual Basic 將顯示與該錯誤相關的資訊。
發生在 Form_Load 事件之前的錯誤是不可處理的,也不會引發 Error 事件。舉例而言,在設計階段時如果將資料控制項的屬性設成指向一個不知名的資料庫表,就會發生不可處理的錯誤。
回上頁
GotFocus 事件
發生在物件獲得駐點時;可以透過使用者動作,如 TAB 切換,或按一下物件,或者在程式碼中用 SetFocus 方法來改變駐點。而表單只有在所有可見的控制項都不能作用時,才會接收駐點。
語法
Private Sub Form_GotFocus()
Private Sub object_GotFocus([index As Integer])
GotFocus 事件語法具有以下幾個單元:
單元 說明
object 一個「適用於」清單中某物件的物件運算式。
index 一個整數,用以辨認在控制項陣列中的一個控制項。
請注意
通常,GotFocus 事件程序用於指定,當控制項或表單首次接收駐點時發生的動作。例如,透過給表單上每個控制項附加一個 GotFocus 事件程序,就可以顯示簡要描述或狀態列資訊,來對使用者提供指導。根據獲取駐點的控制項不同,透過使其有效、禁止或者是顯示其它控制項的模式,也可以提供出可以看見的要訣。
附註 一個控制項僅當其 Enabled 和 Visible 屬性都設定為 True 時,才能接收駐點。在 Visual Basic 中要自訂鍵盤介面,以移動駐點,設定表單上控制項的定位順序或指定其對應鍵。
回上頁
ItemCheck 事件
當 ListBox 控制項的 Style 屬性設定為 1(核取方塊),且選定或清除 ListBox 控制項中某個項目的核取方塊時,就會發生此事件。
語法
Private Sub object_ItemCheck([index As Integer])
ItemCheck 事件語法具有以下幾個單元:
單元 描述
object 一個物件運算式,其值是「適用於」清單中的一個物件。
Index 一個整數,用來識別清單方塊中的項目。
請注意
附註 在清單項目反白顯示時,ItemCheck 事件並不會發生;明白地說,只有在清單項目的核取方塊被選定或清除時才會發生。
您可用程式碼使 ListBox 的 Selected 陣列中的元素改變(其 Style 屬性設定為 1),來引發 ItemCheck 事件。
ItemCheck 事件會出現在 Click 事件之前。
回上頁
KeyDown, KeyUp 事件
發生在一個物件具有駐點時,使用者按下( KeyDown )或放開 ( KeyUp ) 按鍵時。(若要解譯ANSI 字元,則應使用 KeyPress 事件。)
語法
Private Sub Form_KeyDown(keycode As Integer, shift As Integer)
Private Sub object_KeyDown([index As Integer,]keycode As Integer, shift As Integer)
Private Sub Form_KeyUp(keycode As Integer, shift As Integer)
Private Sub object_KeyUp([index As Integer,]keycode As Integer, shift As Integer)
KeyDown 和 KeyUp 事件語法具有以下幾個單元:
單元 說明
object 一個「適用於」清單中某物件的物件運算式。
index 一個整數,用以辨認在控制項陣列中的一個控制項。
keycode 是一個按鍵碼,例如 vbKeyF1 ( F1 鍵)或 vbKeyHome ( HOME 鍵)。要指定按鍵碼,可使用瀏覽物件中 Visual Basic ( VB ) 物件程式庫中的常數。
shift 在事件發生時回應 SHIFT、CTRL 和 ALT 鍵狀態的一個整數。shift 參數是一位元欄位,以最低的位元對應 SHIFT 鍵(位元 0 ),CTRL 鍵(位元 1 )和 ALT 鍵(位元 2 )。這些位元分別對應於值 1、2 和 4。可以有一些、所有或沒有任何位元的設定來指明有一些、所有? 峔S有任何鍵被按下。例如,如果 CTRL 和 ALT 這兩個鍵都被按住,則 shift 的值為 6。
請注意
對於這兩個事件來說,帶駐點的物件接收所有按鍵訊息。表單只有在沒有可見的和可作用的控制項時才可以獲得駐點。雖然 KeyDown 和 KeyUp 事件可適用於大多數按鍵,不過它們一般常用於:
延伸的字元鍵,如功能鍵等。
巡覽鍵。
組合鍵。
區別數字鍵台和一般的數字鍵。
當需要同時對按住和放開一個鍵回應時,就可使用 KeyDown 和 KeyUp 事件程序。
下列的情況請勿使用 KeyDown 和 KeyUp 事件:
表單有一個 CommandButton 控制項,且 Default 屬性設定為 True 時的 ENTER 鍵。
表單有一個 CommandButton 控制項,且 Cancel 屬性設定為 True 時的 ESC 鍵。
TAB 鍵。
KeyDown 和 KeyUp 用兩種參數來解譯每個字元的大寫和小寫:keycode —顯示實際按鍵(將 A 和 a 作為同一個鍵回應),和 shift —顯示 shift + key 鍵的狀態,且回應 A 或 a 其中之一。
如果要測試 shift 參數,可使用該參數中定義各位元的 shift 常數。該常數有下列值:
常數 值 說明
vbShiftMask 1 SHIFT 鍵的位元遮罩。
VbCtrlMask 2 CTRL 鍵的位元遮罩。
VbAltMask 4 ALT 鍵的位元遮罩。
該常數用作位元遮罩。它可用來測試按鍵的任何組合。
測試一個條件時,首先應依每種結果指定一暫時的整數變數,然後將 shift 與一個位元遮罩進行比對。如下例,可用 And 運算子和 shift 參數一起來測試是否大於 0。指示該修飾鍵是否被按下:
語法
ShiftDown = (Shift And vbShiftMask) > 0
可按此例在一個程序中測試任何條件的組合:
If ShiftDown And CtrlDown Then
附註 如果 KeyPreview 屬性設為 True,則表單會比其上的控制項先接收到此事件。您可用 KeyPreview 屬性來建立全域 ( global ) 鍵盤處理常式。
回上頁
KeyPress 事件
發生在使用者按下並放開一個 ANSI 鍵時。
語法
Private Sub Form_KeyPress(keyascii As Integer)
Private Sub object_KeyPress([index As Integer,]keyascii As Integer)
KeyPress 事件的語法具有以下幾個單元:
單元 說明
object 一個「適用於」清單中某物件的物件運算式。
index 一個整數,用以辨認在控制項陣列中的一個控制項。
keyascii 一個整數,會傳回一個標準數字 ANSI 碼,Keyascii 係藉由傳址方式傳遞,若改變之可傳送一個不同的字元給物件。將 keyascii 改變為 0 時可取消按鍵訊息,這樣一來物件便接收不到字元。
請注意
具有駐點的物件可接收該事件。表單僅在它沒有可見和啟用的控制項,或 KeyPreview 屬性被設定為 True 時,才能接收該事件。一個 KeyPress 事件可以採用任何可列印的鍵盤字元,標準字母中的字元,標準字元與 CTRL 鍵的組合,或少數幾個特殊字元,以及 ENTER 或 BACKSPACE 鍵。KeyPress 事件程序常用來截取在 TextBox 或 ComboBox 控制項所輸入的按鍵訊息,它可立即測試按鍵訊息的正確性,或在字元輸入時對其進行格式處理。改變 keyascii 參數的值會改變所顯示的字元。
您可使用以下運算式將 keyascii 參數轉變為一個字元:
Chr(KeyAscii)
透過該運算式,可執行字串作業,並將該字元轉成一個控制項可解譯的 ANSI 數字:
KeyAscii = Asc(char)
您可以使用 KeyDown 和 KeyUP 事件程序來處理 KeyPress 無法辨識的按鍵訊息,例如:功能鍵、編輯鍵、巡覽鍵,以及組合鍵等。與 KeyDown 和 KeyUp 事件不同的是,KeyPress 不顯示鍵盤的實際狀態,而只是傳遞一個字元。
KeyPress 會將字元的大、小寫解譯為不同的按鍵訊息。而 KeyDown 和 KeyUp 是用兩種參數解譯每個字元的大寫和小寫:keycode — 顯示實際按鍵(將 A 和 a 視為同一個鍵傳回)和 shift —指示 shift + key 鍵的狀態而且回應 A 或 a 其中之一。
如果 KeyPreview 屬性被設定為 True,表單將比該表單上的控制項先接收此事件。您可用 KeyPreview 屬性來建立全域 ( global ) 鍵盤處理常式。
附註 .CTRL+@ 組合鍵的 ANSI 代碼是 0。Visual Basic 會將一個零值的 keyascii 辨識為一個長度為零的字串 (""),所以在應用程式中應避免使用 CTRL+@ 的組合鍵。
回上頁
LinkClose 事件
發生在一 DDE 對談結束時。DDE 對談的兩個應用程式之任一者可以在任何時候終止。
語法
Private Sub Form_LinkClose( )
Private Sub MDIForm_LinkClose( )
Private Sub object_LinkClose([index As Integer])
LinkClose 事件語法具有以下幾個單元:
單元 說明
object 一個「適用於」清單中某物件的物件運算式。
index 一個整數,用以辨認在控制項陣列中的一個控制項。
請注意
您可使用 LinkClose 事件程序來通知使用者 DDE 對談已經終止,也可加入要重新建立連接的疑難排解,或如何取得協助的資訊。若想顯示簡短的資訊,可使用 MsgBox 函數。
回上頁
LinkError 事件
發生在一個 DDE 對談程序中出現錯誤時。只有在發生一個 DDE 相關的錯誤,且沒有執行任何 Visual Basic Basic 程式碼時,才能識別此事件。錯誤代碼係以參數傳遞。
語法
Private Sub Form_LinkError(linkerr As Integer)
Private Sub MDIForm_LinkError(linkerr As Integer)
Private Sub object_LinkError([index As Integer,]linkerr As Integer)
LinkError 事件語法具有以下幾個單元:
單元 說明
object 一個「適用於」清單中某物件的物件運算式。
linkerr 如以下傳回值中所述,是一個 DDE 相關錯誤的錯誤代碼。
index 一個整數,用以辨認在控制項陣列中的一個控制項。
傳回值
以下表格列出了以 linkerr 參數傳回的所有錯誤代碼,以及對每個錯誤的簡短說明:
值 說明
1 另一個應用程式以錯誤的格式要求資料。在 Visual Basic 嘗試找出另一種應用程式所辨識的格式時,這種錯誤可能連續出現好幾次。
6 當資料來源表單上的 LinkMode 屬性設定為 0(無)之後,接收端應用程式嘗試要繼續 DDE 對談。
7 所有資料來源連結都在使用中(每個資料來源最多有128 個連結)。
8 對接收端的控制項來說:一個自動連結或 LinkRequest 方法無法對控制項中的資料更新。
對資料來源表單來說:接收端無法將資料放置到一個控制項中。
11 無足夠的記憶體給 DDE 使用。
請注意
可用一個 LinkError 事件程序來通知使用者特定的錯誤已經發生。也可加入修改問題的程式碼,或是重新建立連接的故障排除資訊,或何處可以取得幫助。簡短訊息,可使用 MsgBox 函數。
回上頁
LinkNotify 事件
發生在接收端控制項的 LinkMode 屬性被設定為 3(通知),而資料來源改變了由 DDE 連結所定義的資料時。
語法
Private Sub object_LinkNotify([index As Integer])
LinkNotify 事件語法具有以下幾個單元:
單元 說明
object 一個「適用於」清單中某物件的物件運算式。
index 一個整數,用以辨認在控制項陣列中的一個控制項。
請注意
通常,在 LinkNotify 事件中,程式碼可以向使用者發出通知,會立即取得新資料或延遲一些再抓取資料。可用 LinkRequest 方法從資料來源處獲得新資料。
回上頁
LinkOpen 事件
發生在 DDE 對談正在啟動的時候。
語法
Private Sub Form_LinkOpen(cancel As Integer)
Private Sub MDIForm_LinkOpen(cancel As Integer)
Private Sub object_LinkOpen([index As Integer,]cancel As Integer)
LinkOpen 事件語法具有以下幾個單元:
單元 說明
object 一個「適用於」清單中某物件的物件運算式。
cancel 是一個整數,用來決定該 DDE 對談是否已建立。讓 cancel 設定為 0(預設值),表可建立該對談。而將 cancel 設定為任何非零值,則拒絕對談。
index 一個整數,用以辨認在控制項陣列中的一個控制項。
請注意
對表單來說,此事件發生在接收端應用程式與該表單建立 DDE 對談的時候。對控制項來說,此事件發生在控制項與資料來源應用程式啟動 DDE 對談的時候。
回上頁
LostFocus 事件
發生在物件失去駐點時,失去駐點可能由於使用者的動作,如定位到或按一下另一個物件,或者是在程式碼中使用 SetFocus 方法改變駐點。
語法
Private Sub Form_LostFocus( )
Private Sub object_LostFocus([index As Integer])
LostFocus 事件具有以下幾個單元:
單元 說明
object 一個「適用於」清單中某物件的物件運算式。
index 一個整數,用以辨認在控制項陣列中的一個控制項。
請注意
LostFocus 事件程序主要用於對更新做檢驗和確認。使用 LostFocus 可以在駐點移離控制項時做確認。這類事件程序的另一種用途與 GotFocus 事件程序中的應用類似,可以隱藏、顯示其它物件或者使它們有效或無效。也可復原或改變那些在該物件的 GotFocus 事件程序中所設定條件。
如果由 Visual Basic 所建立的執行檔,所顯示的是用 Visual Basic 所建立的 .dll 檔案所建立的對話方塊,則該執行檔的表單將得到 Deactivate 和 LostFocus 事件。這可能是無法預期的,因為在以下情況對話方塊將無法獲得 Deactivate 事件:
如果該物件是處理外的元件。
如果該物件不是用 Visual Basic 編寫成。
在開發環境中當呼叫一個用 Visual Basic 所建立的 DDL 時。
回上頁
MouseDown, MouseUp 事件
發生在使用者按下 ( MouseDown ) 或者釋放 ( MouseUp ) 滑鼠鍵時。
語法
Private Sub Form_MouseDown(button As Integer, shift As Integer, x As Single, y As Single)
Private Sub MDIForm_MouseDown(button As Integer, shift As Integer, x As Single, y As Single)
Private Sub object_MouseDown([index As Integer,]button As Integer, shift As Integer, x As Single, y As Single)
Private Sub Form_MouseUp(button As Integer, shift As Integer, x As Single, y As Single)
Private Sub MDIForm_MouseUp(button As Integer, shift As Integer, x As Single, y As Single)
Private Sub object _MouseUp([index As Integer,]button As Integer, shift As Integer, x As Single, y As Single)
MouseDown 和 MouseUp 事件各種語法具有以下幾個單元:
單元 說明
object 一個「適用於」清單中某物件的物件運算式。
index 一個整數,用以辨認在控制項陣列中的一個控制項。
button .傳回的一個整數,用以標識該事件的產生是由按下( MouseDown ) 或者是由釋放( MouseUp ) 按鈕所引起的。button 參數是具有對應於左按鈕(bit 0),右按鈕(bit 1),以及中間按鈕(bit 2)的位元欄位。這些位元的值分別等於 1,2,和 4。其中僅有一位元可被設定,指示出引起該事件的按鈕。
shift 傳回的一個整數,在button 參數指定的按鈕被按下或者被釋放的情況下,該整數對應於 SHIFT、CTRL,和 ALT 鍵的狀態。某鍵被按住使得該位元被設定。shift 參數是具有對應於 SHIFT 鍵(位元 0),CTRL 鍵(位元 1),以及 ALT 鍵(位元 2)最低位元的位元欄位。這些位元的值分別等於 1,2,和 4。shift 參數指示這些鍵的狀態。這些位元中可能有一些,全部,或者一個也沒有被設定。指示這些鍵中的一些、全部,或者一個也沒有被按下。例如,CTRL 和 ALT 鍵都被按住,則 shift 的值就是 6。
x, y 傳回一個指定滑鼠指標目前位置的數字。x 和 y 的值係透過該物件的 ScaleHeight、ScaleWidth、ScaleLeft,和ScaleTop 屬性所建立的座標系統加以表示。
請注意
使用 MouseDown 或者 MouseUp 事件程序來指定在特定的滑鼠鍵按下或釋放時所引起的動作。不同於 Click 和 DblClick 事件的是,MouseDown 和 MouseUp 事件能夠區分出滑鼠的左、右、和中間按鈕。也可以使用 SHIFT, CTRL, 和 ALT 等修飾鍵,去撰寫用於滑鼠—鍵盤組合動作的程式碼。
下列的情況對 Click 和 DblClick 事件都適用:
如果滑鼠鍵是當指標在表單或控制項之上時按下,則該物件將「擷取」滑鼠並接收包括最後 MouseUp 事件在內的全部滑鼠事件。這暗示了透過滑鼠事件所回應的 x,y 滑鼠指標座標值,可以不一定是在接收它們的物件的內部區域內。
如果滑鼠被持續地按住,則第一次按住之後,擷取滑鼠的物件將接收全部滑鼠事件,直至所有按鈕被釋放為止。
如果要測試 button 或 shift 參數,可以使用瀏覽物件中的 Visual Basic (VB) 物件程式庫中列出的常數,用來定義該參數中的位元:
常數(按鈕) 值 說明
vbLeftButton 1 按住左按鈕
vbRightButton 2 按住右按鈕
vbMiddleButton 4 按住中間的按鈕
常數(修飾) 值 說明
vbShiftMask 1 按住 SHIFT 鍵。
vbCtrlMask 2 按住 CTRL 鍵。
vbAltMask 4 按住 ALT 鍵。
隨後這些常數做為位元遮罩,在無需計算各個組合的獨一的位元欄位,即可測試出按鈕的各種組合。
附註 可以用 MouseMove 事件程序來回應由於滑鼠移動而引起的事件。MouseDown 和 MouseUp 所使用的 button 參數與 MouseMove 所使用的 button 參數是不同的。對於 MouseDown 和 MouseUp 來說,button 參數要精確地指出每個事件的一個按鈕,而對於 MouseMove 來說,指? 靰漪O所有按鈕的當前狀態。
回上頁
MouseMove 事件
發生在移動滑鼠時。
語法
Private Sub Form_MouseMove(button As Integer, shift As Integer, x As Single, y As Single)
Private Sub MDIForm_MouseMove(button As Integer, shift As Integer, x As Single, y As Single)
Private Sub object_MouseMove([index As Integer,] button As Integer, shift As Integer, x As Single, y As Single)
MouseMove 事件語法具有以下幾個單元:
單元 說明
object 一個「適用於」清單中某物件的物件運算式。
index 一個整數,用以辨認在控制項陣列中的一個控制項。
button 對應滑鼠各個按鈕的一個整數,如果某個按鈕按住,其中就有一個位元被設定。button 參數是具有對應於左按鈕(位元 0),右按鈕(位元 1),以及中間按鈕(位元 2)的位元欄位。這些位元的值分別等於 1,2,和 4。它指示這些滑鼠鍵的整體狀態;三個位元中的一些、全部、或一個也沒有被設定,指示這些按鈕中的一些、全部、或一個也沒有被按住。
shift 一個整數,該整數對應於SHIFT,CTRL,和 ALT 鍵的狀態。某鍵被按住使得一個位元被設定。shift 參數是具有對應於 SHIFT 鍵(位元 0),CTRL 鍵(位元 1),以及 ALT 鍵(位元 2)最低位元的一個位元欄位。這些位元的值分別等於 1,2,和 4。shift 參數指示這些鍵的? 牯A。這些位元中可能有一些、全部、或者一個也沒有被設定,指示這些鍵中的一些、全部、或者一個也沒有被按住。例如,CTRL 和 ALT 鍵都被按住,則 shift 的值就是 6。
x, y 傳回一個指定滑鼠指標目前位置的數字。x 和 y 的值係透過該物件的 ScaleHeight、ScaleWidth、ScaleLeft,和ScaleTop 屬性所建立的座標系統加以表示。
請注意
MouseMove 事件伴隨滑鼠指標在物件間移動而不斷地產生。除非有另一個物件擷取了滑鼠,否則,當滑鼠位置在物件的邊界範圍內時該物件就能接收 MouseMove 事件。
要測試 button 或 shift 參數,可使用瀏覽物件中的 Visual Basic (VB) 物件程式庫中所列出的常數,用來定義該參數中的各個位元:
常數(按鈕) 值 說明
vbLeftButton 1 按住左按鈕。
vbRightButton 2 按住右按鈕。
vbMiddleButton 4 按住中間的按鈕。
常數(換擋) 值 說明
vbShiftMask 1 按住 SHIFT 鍵。
vbCtrlMask 2 按住 CTRL 鍵。
vbAltMask 4 按住 ALT 鍵。
然後這些常數用作位元遮罩,對按鈕的各種組合進行檢測,無須計算出各個組合的位元欄位值。
要測試某一條件,首先請將各個結果指派給一個暫存整數變數,然後再與一個位元遮罩的 button 或 shift 參數進行比較。測試應當用各個參數進行 And 運算,若結果大於零,則表示該鍵或按鈕被按住。其方式如下:
LeftDown = (Button And vbLeftButton) > 0
CtrlDown = (Shift And vbCtrlMask) > 0
然後,接下去可對結果的各種組合進行檢測,其作業如下:
If LeftDown And CtrlDown Then
附註 若要對滑鼠鍵按下和釋放所引起的事件進行處理,可使用 MouseDown 和 MouseUp 事件程序。
MouseMove 事件的 button 參數與 MouseDown 和 MouseUp 事件的 button 參數是不同的。對於 MouseMove 事件來說,
button 參數指示的是所有按鈕目前的狀態;一個 MouseMove 事件可指示某類、全部或沒有按鈕被按住。對於 MouseDown
和 MouseUp 事件來說,button 參數明確地指示每個事件的按鈕。
在 MouseMove 事件中任何時侯移動視窗,都能引起相關事件。當該視窗搬動到指標下面時將產生 MouseMove 事件。即使是滑鼠完全不動也會產生 MouseMove 事件。
回上頁
OLECompleteDrag 事件
發生在來源元件被放下到目標元件上時,發生時會通知來源元件拖曳作業是否有被執行或被取消。
語法
Private Sub object_CompleteDrag([effect As Long])
CompleteDrag 事件語法具有以下幾個單元:
單元 描述
object 物件運算式,其為「適用於」清單中的某個物件。
effect 長整數,其值由來源物件所設定,用來識別執行的動作。藉此,來源物件便可在元件被移動後,採取適當的動作(例如,當來源元件被移動到另一個元件中時,便可從來源中移除該元件)。其所有可能的值列於「設定值」中。
設定值
effect 設定值為:
常數 值 描述
vbDropEffectNone 0 放下目標不接受資料,或者放下作業被取消。
VbDropEffectCopy 1 放下後,資料從來源被複製到目標中。原來的資料沒有被拖曳作業改變。
VbDropEffectMove 2 放下後,在拖曳來源中的原始資料和放下目標之間建立了一個連結。
請注意
OLECompleteDrag 事件是 OLE 拖放作業最後呼叫的事件。當物件被放下到目標元件中時,這個事件會通知來源元件其所執行的動作。目標元件透過 OLEDragDrop 事件的 effect 參數設定此值。藉此,來源元件可決定需執行何種動作。例如,當物件被移動到目標中時 (vbDropEffectM ove),來源元件應當將該物件刪除。
如果 OLEDragMode 設定為 Automatic,則 Visual Basic 將會執行預設的動作。在這個情況下,此事件仍然會發生,以允許您新增或改變動作。
大部份的元件都有支援手動 OLE 拖放事件,少部份則有支援自動 OLE 拖放事件。
回上頁
OLEDragDrop 事件
此事件發生在來源元件被放下到目標元件時,。
附註 僅當 OLEDropMode 被設定為 1 (Manual) 時,此事件才會發生。
語法
Private Sub object_OLEDragDrop(data As DataObject, effect As Long, button As Integer, shift As Integer, x As Single, y As Single)
OLEDragDrop 事件的語法具有以下幾個單元:
單元 描述
object 物件運算式,其為「適用於」清單中的某個物件。
data DataObject 物件,包含來源提供的資料格式,另外也可能包含以這些資料格式儲存的資料。若DataObject 中不包含資料,資料將會在控制項呼叫 GetData 方法時獲得。SetData 和 Clear 方法在這裡無法使用。
effect 長整數,由來源物件所設定,用來識別執行的動作。藉此,來源物件便可在元件被移動後,採取適當的動作(例如,將該元件從來源中移除)。其所有可能的值列於「設定值」中。
button 整數,用來指示滑鼠的狀態。位元 0 代表左鍵,位元 1 代表右鍵,位元 2 則代表中鍵。這些位元相對的值分別為 1,2 和 4,它指示了滑鼠鍵的狀態。當這三個位元中的某些位元被設為一時,代表其相對的滑鼠鍵被按下。
shift 整數,用來指示 SHIFT、CTRL 和 ALT 鍵的狀態。位元 0 代表 SHIFT 鍵,位元 1 代表 CTRL 鍵,位元 2 則代表 ALT 鍵。這些位元相對的值分別為 1,2 和 4,它指示了這些鍵的狀態。當這三個位元中的某些位元被設為一時,代表其相對的鍵被按下。例如,同時按 CTRL 和 ALT 鍵時,shift 值為 6。
x,y 指示滑鼠指標目前的位置。x 和 y 的值由其所在的物件之 ScaleHeight、ScaleWidth、ScaleLeft 和 ScaleTop 屬性所設定的座標系統中之值來表示。
設定值
effect 設定值為:
常數 值 描述
vbDropEffectNone 0 放下目標無法接受資料。
VbDropEffectCopy 1 放下後,資料被從來源複製到目標中。原來的資料沒有改變。
VbDropEffectMove 2 放下後,資料被移動到目標中。移動後,拖曳來源應將資料從其中移除。
請注意
當您的來源為 ActiveX 元件時,您應過濾 effect 參數值中沒有使用到的位元,以確保能相容於將來製作的 ActiveX 元件。目前,effect 參數的 32 個位元當中,只有 3 個位元已被使用,然而將來的 Visual Basic 版本可能會用到其它位元。所以,為了避免將來使用時發生問題? A在對這個參數進行任何比較之前,在拖曳來源和放下目標中都應過濾這些值。
舉例來說,在來源元件中不應該直接拿 effect 和 vbDropEffectCopy 相比,如:
If Effect = vbDropEffectCopy...
而是應該過濾該值或過濾被比較的值,如:
If Effect And vbDropEffectCopy = vbDropEffectCopy...
-或-
If (Effect And vbDropEffectCopy)...
如此一來,當 Visual Basic 新版本中加入新的定義時,您的程式碼仍然能與之相容。
大部份的元件都有支援手動 OLE 拖放事件,少部份則有支援自動 OLE 拖放事件。
回上頁
OLEDragOver 事件
當一個元件被拖曳到另一個元件之上時發生。
語法
Private Sub object_OLEDragOver(data As DataObject, effect As Long, button As Integer, shift As Integer, x As Single, y As Single, state As Integer)
OLEDragOver 事件的語法具有以下幾個單元:
單元 描述
object 物件運算式,其為「適用於」清單中的某個物件。
ddta DataObject 物件,包含來源提供的資料格式,另外也可能包含以這些格式儲存的資料。若 DataObject 不包含資料,則資料會在控制項呼叫 GetData 方法時提供。SetData 和 Clear 方法在這裡無法使用。
effect 長整數,由來源物件所設定,用來識別執行的動作。在事件程序中,此參數必須被目標元件正確地設定。effect 的值由所有動作(如設定值表所示)用邏輯 Or 後來決定。目標元件應檢查這些動作以及其它參數以確定哪個動作適用於它,然後把此參數設定為其可以執行的動? @之一(如同來源所指定的),以便確定當使用者將來源放下到元件上時該執行哪個動作。其所有可能的值列於「設定值」中。
button 整數,用來指示滑鼠的狀態。位元 0 代表左鍵,位元 1 代表右鍵,位元 2 則代表中鍵。這些位元相對的值分別為 1,2 和 4,它指示了滑鼠鍵的狀態。當這三個位元中的某些位元被設為一時,代表其相對的滑鼠鍵被按下。
shift 整數,用來指示 SHIFT、CTRL 和 ALT 鍵的狀態。位元 0 代表 SHIFT 鍵,位元 1 代表 CTRL 鍵,位元 2 則代表 ALT 鍵。這些位元相對的值分別為 1,2 和 4,它指示了這些鍵的狀態。當這三個位元中的某些位元被設為一時,代表其相對的鍵被按下。例如,同時按 CTRL 和 ALT 鍵時,shift 值為 6。
x,y 在目標表單或控制項中,指示滑鼠指標目前的位置。x 和 y 的值由其所在的物件之 ScaleHeight、ScaleWidth、ScaleLeft 和 ScaleTop 屬性所設定的座標系統中之值來表示。
state 整數,用來表示一正被拖放到目標表單或控制項中的控制項之傳送狀態。所有可能的值列於「設定值」中。
設定值
effect 設定值為:
常數 值 描述
vbDropEffectNone 0 放下目標無法接受資料。
VbDropEffectCopy 1 放下後,資料被從來源複製到目標中。原來的資料沒有改變。
VbDropEffectMove 2 放下後,資料被移動到目標中。移動後,拖曳來源應將資料從其中移除。
VbDropEffectScroll -2147483648(&H80000000) 在目標元件中,捲動正在或將要發生。此值與其它值共同使用。注意 當目標元件中有您自己設定的捲動動作時才要使用。
state 設定值為:
常數 值 描述
vbEnter 0 來源元件正要被拖曳到目標範圍內。
VbLeave 1 來源元件正要被從目標範圍內拖曳到目標範圍外。
VbOver 2 來源元件正要被從目標範圍中的某個位置移到另一個位置。
請注意
附註 如果 state 參數的值是 vbLeave,表示滑鼠指標已離開了目標,此時 x 和 y 參數之值為零。
當您的來源為 ActiveX 元件時,您應過濾 effect 參數值中沒有使用到的位元,以確保能相容於將來製作的 ActiveX 元件。目前,
effect 參數的 32 個位元當中,只有 3 個位元已被使用,然而將來的 Visual Basic 版本可能會用到其它位元。所以,為了避免將來使用時發生問題,在對這個參數進行任何比較之前,在拖曳來源和放下目標中都應過濾這些值。
舉例來說,在來源元件中不應該直接拿 effect 和 vbDropEffectCopy 相比,如:
If Effect = vbDropEffectCopy...
而是應該過濾該值或過濾被比較的值,如:
If Effect And vbDropEffectCopy = vbDropEffectCopy...
-或-
If (Effect And vbDropEffectCopy)...
如此一來,當 Visual Basic 新版本中加入新的定義時,您的程式碼仍然能與之相容。
大部份的元件都有支援手動 OLE 拖放事件,少部份則有支援自動 OLE 拖放事件。
回上頁
OLEGiveFeedback 事件
在 OLEDragOver 事件發生後緊跟著發生。OLEGiveFeedback 使來源元件可以提供使用者一個可見的回應。例如,您可以用不同的滑鼠游標,讓使用者知道當他將物件放下時,將會執行什麼動作。或者,您也可? H在使用者所選擇的物件上(在來源元件中)做一些改變,讓使用者知道有什麼事件將會發生。
語法
Private Sub object_OLEGiveFeedback(effect As Long, defaultcursors As Boolean)
OLEGiveFeedback 事件的語法具有以下幾個單元:
單元 描述
object 物件運算式,其為「適用於」清單中的某個物件。
effectt 長整數,由目標元件在 OLEDragOver 事件中設定,用來指定當使用者執行放下作業時,所要執行的動作。如此,來源便能根據這個值執行適當的動作(例如給使用者一個可見的回應)。其所有可能的值列於「設定值」中。
defaultcursors 布林值,決定 Visual Basic 將使用元件提供的預設滑鼠游標,還是使用者自訂的滑鼠游標。
True(預設) = 使用預設的滑鼠游標。
False = 不用預設游標。滑鼠游標必須用 Screen 物件的 MousePointer 屬性設定。
設定值
effect 設定值為:
常數 值 描述
vbDropEffectNone 0 放下目標無法接受資料。
VbDropEffectCopy 1 放下後,資料被從來源複製到目標中。原來的資料沒有改變。
VbDropEffectMove 2 放下後,資料被移動到目標中。移動後,拖曳來源應將資料從其中移除。
VbDropEffectScroll -2147483648(&H80000000) 在目標元件中,捲動正在或將要發生。此值與其它值共同使用。注意 當目標元件中有您自己設定的捲動動作時才要使用。
請注意
如果您沒有在 OLEGiveFeedback 事件程序中加入任何程式碼,或是當 defaultcursors 參數被設為 True 時,Visual Basic 將會自動地把滑鼠游標設為元件提供的預設游標。
當您的來源為 ActiveX 元件時,您應過濾 effect 參數值中沒有使用到的位元,以確保能相容於將來製作的 ActiveX 元件。目前,
effect 參數的 32 個位元當中,只有 3 個位元已被使用,然而將來的 Visual Basic 版本可能會用到其它位元。所以,為了避免將來使用時發生問題,在對這個參數進行任何比較之前,在拖曳來源和放下目標中都應過濾這些值。
舉例來說,在來源元件中不應該直接拿 effect 和 vbDropEffectCopy 相比,如:
If Effect = vbDropEffectCopy...
而是應該過濾該值或過濾被比較的值,如:
If Effect And vbDropEffectCopy = vbDropEffectCopy...
-或-
If (Effect And vbDropEffectCopy)...
如此一來,當 Visual Basic 新版本中加入新的定義時,您的程式碼仍然能與之相容。
大部份的元件都有支援手動 OLE 拖放事件,少部份則有支援自動 OLE 拖放事件。
回上頁
OLESetData 事件
當目標元件在來源的 DataObject 物件上執行 GetData 方法,但是還沒有載入指定格式的資料之前,在來源元件上發生。
語法
Private Sub object_OLESetData(data As DataObject, dataformat As Integer)
OLESetData 事件的語法具有以下幾個單元:
單元 描述
object 物件運算式,其為「適用於」清單中的某個物件。
data 放置所需資料的 DataObject 物件。元件呼叫 SetData 方法以載入所需的格式。
dataformat 整數,指定目標元件所需的資料之資料格式。來源元件用此值來決定要將何種資料放入 DataObject 物件中。
請注意
在某些情況下,特別是在來源元件支援多種資料格式時,您可能希望延緩執行將資料載入來源元件的 DataObject 物件中,以節省時間。此事件允許來源對指定的資料格式僅回應一個請求。當這個事件被呼叫時,來源元件應檢查 format 參數以決定需要載入的內容,然後在 DataObje ct 物件上執行 SetData 方法載入資料,這些資料隨後將被送回到目標元件。
回上頁
OLEStartDrag 事件
當元件的 OLEDrag 方法被執行時;或者當元件的 OLEDragMode 屬性被設為 Automatic,而元件的 OLE 拖放作業又正要開始執行時,這個事件就會發生。
此事件用來指示來源元件可支援的資料格式和放下動作。您也可用此事件將資料插入到 DataObject 物件中。
語法
Private Sub object_StartDrag(data As DataObject, allowedeffects As Long)
StartDrag 事件的語法具有以下幾個單元:
單元 描述
object 物件運算式,其為「適用於」清單中的某個物件。
data DataObject 物件,其中包含了來源所能提供的資料格式,另外也可能包含以這些格式儲存的資料。
若 DataObject 不包含資料,則資料會在控制項呼叫 GetData 方法時提供。您應提供此事件中該參數的值。
SetData 和 Clear 方法在這裡無法使用。
allowedeffects 長整數,指示來源元件可支援的動作。其所有可能的值列於「設定值」中。您應提供此事件中該參數的值。
設定值
allowedeffects 設定值為:
常數 值 描述
vbDropEffectNone 0 放下目標無法接受資料。
VbDropEffectCopy 1 放下後,資料被從來源複製到目標中。原來的資料沒有改變。
VbDropEffectMove 2 放下後,資料被移動到目標中。移動後,拖曳來源應將資料從其中移除。
請注意
您應該在來源元件中,將其所支援的值邏輯 Or 起來,並把結果放到 allowedeffects 參數中。如此一來,目標元件就能使用此值來決定適當的動作(以及給使用者適當的反應)。
如果元件的 OLEDragMode 屬性被設為 Automatic,StartDrag 事件同樣也會發生。這樣,您就可以在元件向 DataObject 物件加入資料格式及資料後,再向 DataObject 物件加入您自己設定的資料格式及資料。您也可以透過清除 DataObject 物件(用 Clear 方法)來取消元件的預? ]行為,然後加入自己的資料和資料格式。
您可能會希望把資料載入 DataObject 物件這個動作延遲,直到目標元件要求該資料為止。如此一來,由於沒有載入多餘的資料格式,您便節省來源元件的執行時間。當目標元件執行 DataObject 物件的 GetData 方法時,若 DataObject 中沒有包含其所需的資料,則來源元件的 OLE SetData 事件將會發生。此時,您就可以把資料載入到 DataObject 物件中。如此,便可以向目標元件提供資料。
回上頁
Paint 事件
發生在一個物件被搬動或放大之後,或在一個覆蓋該物件的表單移開之後,該物件部份或全部顯露出來時。
語法
Private Sub Form_Paint( )
Private Sub object_Paint([index As Integer])
Paint 事件語法具有以下幾個單元:
單元 說明
object 一個「適用於」清單中某物件的物件運算式。
index 一個整數,用以辨認在控制項陣列中的一個控制項。
請注意
如果在程式碼中做各種圖形方法的輸出,則 Paint 事件程序就很有用。使用 Paint 程序,可以確保這樣的輸出在必要時能被重繪。
使用 Refresh 方法時,Paint 事件即被呼叫。如果 AutoRedraw 屬性被設定為 True,重新繪圖會自動進行,就不需要 Paint 事件。
如果設定 ClipControls 屬性為 False,則在 Paint 事件程序中的繪圖方法僅影響該表單中新顯露的區域;否則,繪圖方法將影響在該表單未被控制項覆蓋的所有區域。(Image,Label,Line 和 Shape 控制項除外。)
在 Resize 事件程序中使用 Refresh 方法可在每次調整表單大小時強迫重繪整個物件。
附註 針對某類的工作使用 Paint 事件程序會導致一個相關事件。通常來說,應盡量避免用 Paint 事件程序來做以下的動作:
移動一個表單或控制項,或者是調整其大小。
改變任何會影響大小或外觀的變數,例如設定物件的 BackColor 屬性等。
採用 Refresh 方法。
對上述這些工作來說,利用 Resize 事件可能更為合適。
回上頁
PathChange 事件
發生在路徑被程式碼中的 FileName 或 Path 屬性的設定所改變時。
語法
Private Sub object_PathChange([index As Integer])
PathChange 事件語法具有以下幾個單元:
單元 說明
object 一個「適用於」清單中某物件的物件運算式。
index 一個整數,用以辨認在控制項陣列中的一個控制項。
請注意
您可使用 PathChange 事件程序來回應 FileListBox 控制項中路徑的改變。當指定包括新路徑的字串給 FileName 屬性時,FileListBox 控制項就採用 PathChange 事件。
回上頁
PatternChange 事件
發生在檔案的清單樣式,如:「*.*」,藉由程式碼中對 FileName 或 Path 屬性的設定所改變時。
語法
Private Sub object_PatternChange([index As Integer])
PatternChange 事件語法具有以下幾個單元:
單元 說明
object 一個「適用於」清單中某物件的物件運算式。
index 一個整數,用以辨認在控制項陣列中的某個控制項。
請注意
您可使用 PatternChange 事件程序,來回應在 FileListBox 控制項中樣式的改變。當將指定包含新樣式的字串給 FileName 屬性時,FileListBox 控制項將採用 PathChange 事件。
回上頁
Reposition 事件
發生在一筆資料錄成為目前資料錄之後。
語法
Private Sub object.Reposition ([index As Integer])
Reposition 事件具有以下幾個單元:
單元 描述
object 物件運算式,指定「適用於」清單中的物件。
index 控制項陣列,用來識別控制項。
請注意
當載入 Data 控制項時,Recordset 物件中的第一筆資料錄會變成目前資料錄,並引發 Reposition 事件。無論何時只要使用者按一下 Data 控制項上的某個按鈕、進行資料錄間的移動、或者使用了某個 Move 方法(如 MoveNext),Find 方法(如 FindFirst),或任何其它改變作? 庛禤?瘧搣囥峇隤k,在每筆資料錄成為目前資料錄以後,均會發生 Reposition 事件。
相反的,Validate 事件則是發生在移到不同的資料錄之前。
使用此事件來進行以目前資料錄中的資料為基礎之計算,或者改變表單來回應作用資料錄中的資料。
回上頁
Resize 事件
發生在一個物件第一次顯示,或當一個物件的視窗狀態改變時。(例如,一個表單被最大化、最小化或還原時。)
語法
Private Sub Form_Resize()
Private Sub object_Resize(height As Single, width As Single)
Resize 事件語法具有以下幾個單元:
單元 說明
object 一個「適用於」清單中某物件的物件運算式。
height 用來指定控制項新高度的數值。
width 用來指定控制項新寬度的數值。
請注意
當父表單調整大小時,可用 Resize 事件程序來移動控制項或調整其大小。您也可用此事件程序來重新計算變數或屬性,例如,
ScaleHeight 和 ScaleWidth 等,其可由表單的尺寸決定。如果在調整大小時想要保持圖形的大小與表單的大小成比例,可在一個 Resize 事件中透過 Refresh 方法呼叫 Paint 事件。
若 AutoRedraw 屬性設定為 False,而調整表單大小時,則 Visual Basic 也會按 Resize 和 Paint 的順序,呼叫相關的事件。當給這些相關事件附加程序時,要確認它們的作業不會互相衝突。
當一個 OLE 收納器控制項的 SizeMode 屬性被設定為 2(自動調大小)時,該控制項會自動根據包含於該控制項之中的物件所顯示的大小來調整其大小。如果所顯示的物件的大小發生變化,則該控制項自動重新調整大小,以適應該物件的變化。當這種情況出現時,該物件呼叫 Resiz e 事件會在 OLE 容器控制項被重調大小之前發生。height 和 width 部份指示該物件的最佳大小(這個尺寸由建立該物件的應用程式決定)。您可透過在 Resize 事件中改變 height 和 width 部份的值,個別設定控制項的大小。
回上頁
Scroll 事件
發生在 ScrollBar 控制項上的捲動方塊,或包含一個捲軸的物件被重新定位,或做在水平或垂直上的捲動時。
語法
Private Sub dbgrid_Scroll([cancel As Integer])
Private Sub object_Scroll( )
Scroll 事件語法具有以下幾個單元:
單元 說明
object 一個「適用於」清單中某物件的物件運算式。
cancel 如請注意所說明的,其決定捲動作業是否要繼續以及 ScrollBar 或 DBGrid 是否被重繪。
請注意
對一個 DBGrid 控制項來說,這個事件發生在水平或垂直地捲動方格的時候,但卻是在方格被重繪以顯示捲動作業結果之前。
對於一個 ComboBox 控制項來說,此事件只發生在控制項之下拉部份中的捲軸被操作的時候。
將 cancel 設定為 True 會導致 DBGrid 無法捲動,並且不出現重繪作業。如果在此事件中呼叫 Refresh 方法,則即使 cancel 被設定為 True,該方格也按其新的(捲動的)配置重繪。然而,在這種情況下,由於捲動作業失敗,使其迅速地退回到原來位置,而該格線會被再一次重? 腹C
可用此事件進行計算或操縱必須與捲軸中所進行的變動同步的控制項。反之,如果在 ScrollBar 控制項變動之後只想讓更新一次,則可使用 Change 事件。
附註 在此事件中應避免使用 MsgBox 陳述式或函數。
回上頁
Timer 事件
在一個 Timer 控制項的預定的時間間隔之後發生。該間隔的頻率儲存於該控制項的 Interval 屬性中,它以千分之一秒為單位元來指定時間的長度。
語法
Private Sub object_Timer([index As Integer])
Timer 事件語法具有以下幾個單元:
單元 說明
object 一個「適用於」清單中某物件的物件運算式。
index 一個整數,用以辨認在控制項陣列中的某個控制項。
請注意
您可用此事件在每次 Timer 控制項時間間隔之後,通知 Visual Basic 應該做什麼。在使用 Timer 事件時:
Interval 屬性是以千分之一秒為單位,指定 Timer 事件之間的間隔。
無論何時,只要 Timer 控制項的 Enabled 屬性被設定為 True,且 Interval 屬性大於 0,則 Timer 事件以Interval 屬性指定的時間間隔發生。
回上頁
Validate 事件
一筆不同的資料錄成為目前資料錄之前;Update 方法之前(用 UpdateRecord 方法儲存資料時除外);以及 Delete、Unload
或 Close 動作之前,會發生此事件。
語法
Private Sub object_Validate ([ index As Integer,] action As Integer, save As Integer)
Validate 事件的語法具有以下幾個單元:
單元 描述
object 物件表示式,指定「適用於」清單中的物件。
index 控制項陣列,用來識別控制項。
action 整數,用來指示引發此事件的動作,細節詳述於「設定」中。
save 布林運算式,用來指定所連結的資料是否改變,細節詳述於「設定」中。
設定
action 的設定為:
常數 值 說明
vbDataActionCancel 0 當 Sub 結束時,取消動作。
vbDataActionMoveFirst 1 MoveFirst 方法。
vbDataActionMovePrevious 2 MovePrevious 方法。
vbDataActionMoveNext 3 MoveNext 方法。
vbDataActionMoveLast 4 MoveLast 方法。
vbDataActionAddNew 5 AddNew 方法。
vbDataActionUpdate 6 Update 動作(不是 UpdateRecord)。
vbDataActionDelete 7 Delete 方法。
vbDataActionFind 8 Find 方法。
vbDataActionBookmark 9 Bookmark 屬性已被設定。
vbDataActionClose 10 Close 的方法。
vbDataActionUnload 11 表單正在釋出。
save 的設定值為:
設定值 描述
True 連結的資料已被改變。
False 連結的資料未被改變。
請注意
這些常數會被列示在「瀏覽物件」的 Visual Basic(VB)物件程式庫中。
save 引數初始化時指出連結的資料是否已經改變。如果複製緩衝區中的資料改變時,此引數仍舊為 False。如果該事件結束時 save 為 True,則會啟動 Edit 和 UpdateRecord 方法。UpdateRecord 方法只儲存那些來自資料連結控制項或 DataChanged屬性設定為 True 的複製緩衝區的資料。
即使資料連結控制項中的資料未改變或者不存在的資料連結控制項,此事件也可能會發生。您用此事件來改變值和更新資料,也可以選擇儲存資料或停止任何引起事件發生的動作,並以不同的動作取代之。
您可以改變 action 引數而將動作轉換成另一個。您也可以改變各種 Move 方法和 AddNew 方法,它們能自由地交換(Move 到 AddNew,Move 到其它 Move,或 AddNew 到 Move)。當使用 AddNew 時,可以用MoveNext 且然後執行另一個 AddNew來檢查 EditMode 屬性,以確定是 Edit 還是 AddNew 動作正在進行中。若試著改變 AddNew 或 Moves 為任何其它的動作,將會被忽略或者導致可處理的錯誤。任何動作都可透過將 action 設為 0 而停止。
在此事件的程式碼中,您可以檢查當每個 DataChanged 為 True 時的資料連結控制項中的資料。然後可以將 DataChanged 設為 False ,以避免將此資料存入資料庫。
在此事件中,您無法使用帶底線的 Recordset 物件上的任何方法(如MoveNext)。