一。對象的事件是對象的動作和行為。vfp中對象的事件可通過用戶操作、程序代碼或系統觸發。只有當事件發生時,事件的程序才會運行。如果沒有任何事件發生,則整個程序就處于停滯狀態。比如在第一章所舉的實例中,運行表單后,如果我們什么也不做,則程序處于停頓狀態。我們在"半徑"文本框中輸入一個半徑,然后單擊"計算"按鈕,則觸發命令按鈕的click事件,內部的代碼得到執行,計算出圓的面積顯示在第二個文本框中。所以說,vfp程序是由事件驅動的程序。
二。事件的分類:
1.鼠標事件:所謂鼠標事件,就是在vfp應用程序的運行界面中,用鼠標對其中的對象進行操作所觸發和事件。
(1).Click事件:是鼠標單擊時所產生的事件。click事件既可由用戶觸發,也可由執行事件的程序代碼觸發。
(2).Dbclick事件:雙擊鼠標時產生的事件。
(3).mousedown和mouseup事件:當鼠標指針指向對象并按下鼠標左鍵時觸發mousedown事件,當釋放鼠標左鍵時觸發mouseup事件。
(4).mousemove事件:在對象上移動鼠標指針時產生的事件。
(5).dragdrop事件:用鼠標拖動對象時產生的事件。
(6).downclick和upclick事件:當用鼠標單擊組合框、列表框或微調器的向下箭頭時,觸發downclick事件;單擊向上箭頭時,觸發upclick事件。
2.鍵盤事件keypress:單擊某一鍵時產生的事件。通常對獲取焦點的對象,當按下鍵盤鍵并放開時觸發keypress事件。參數:鍵ASCⅡ碼,shiftctrlalt狀態
其中,shiftctrlalt狀態為三鍵值的和。shift值為1,ctrl值為2,alt值為4
3.改變對象內容事件interactivechange:當用操作改變對象內容時交觸發此事件,比如改變文本框中的內容將觸發文本框的interactivechange事件。
4.對象的焦點事件:當對象取得焦點(focus)時,該對象將成為當前活動對象,操作將面向該對象。若文本框取得焦點,光標將在文本框中閃爍,指明編輯文本的當前位置。當命令按鈕獲得焦點時,按鈕框內出現虛線框。屬于控件焦點的事件有:獲取焦點,失去焦點以及獲取和失去焦點前觸發的事件。
(1).獲取焦點事件gotfocus:當對象獲取焦點時將觸發gotfocus事件,而獲取焦點的方法可以通過按tab鍵,鼠標單擊對象或對對象使用 setfocus方法。注意:只有對象的enabled和visible屬性為"真"(.T.)時,對象才能獲得焦點。
(2).失去焦點事件lostfocus:當對象失去焦點時將觸發該事件。對象可能因操作失去焦點,例如重新選擇對象或單擊另一對象;也可能在程序代碼中執行獲取焦點的方法setfocus.失去焦點的事件代碼常用于取消gotfocus事件代碼所做的工作,例如取消在執行gotfocus事件過程代碼所提供的指導用戶操作信息。
(3).when事件:此事件在對象獲取焦點前發生。如果when事件返回真值,則對象可獲取焦點;否則對象不能獲取焦點。
(4).vaid事件:在對象失去焦點前觸發此事件,以控制對象是否真的失去焦點。若vaid返回真值,對象才可失去焦點;否則對象不會失去焦點。
5.表單事件:
(1).load事件:load事件在創建表單集或表單之前觸發,其事件過程代碼常用于做表單集或表單的初始化工作。如果是表單集,則先觸發表單集的load事件,然后觸發表單的load事件。
(2).unload事件:unload事件是釋放表單集或表單之前被觸發的最后一個事件。在觸發該事件之前先觸發表單或表單集的destroy事件,使對象無效。例如,釋放表單集時觸發的destroy和unload事件順序如下所示:
表單集destroy→表單destroy→表單中各對象destroy→表單unload→表單集unload
(3).activate事件:當激活表單等對象時觸發activate事件。通常可在調用對象的show方法時觸發該事件用來激活或顯示對象。
(4).deactivate事件:當容器對象沒有焦點而處于非活動狀態時觸發deactivate事件。常見于當激活新對象時,觸發原活動對象的deactivate事件,同時觸發新對象的activate事件。
6.其它事件:
(1).timer事件:在每次計時時間到達時觸發timer事件,計時間隔由timer控件的interval屬性來指定。
(2).init事件:在對象建立時,其init事件被觸發。通常在init事件代碼中編寫有關對象的初始化的操作,如加載圖片對象中的圖片等。對容器對象來說,首先觸發的是對象的init事件,然后觸發容器的init事件。因此,容器的init事件代碼可訪問容器中的每個對象。此外,容器中對象的 init事件,與它們被添加到容器中的順序相同。
(3).destroy事件:在對象被釋放前觸發其destroy事件,使該對象無效。如果對象是一個容器,則首先觸發其中的對象的destroy事件,然后觸發容器對象的destroy事件。
(4).error事件:此事件在執行對象的方法程序代碼時出錯時被觸發。可用該事件的程序代碼處理錯誤。
Visual FoxPro基礎教程完整版6.為事件編寫代碼:如果沒有為對象的某些事件編寫代碼,當事件發生時系統將不會發生任何操作。比如,不給命令按鈕添加任何代碼,運行時,用戶即使單擊該命令按鈕,也不會產生任何操作。
(1).在設計時,要為一個對象的某個事件添加代碼,在需雙擊該對象,即會彈出代碼窗口,如圖17,
在該窗口上方的"過程"列表中和選擇事件名稱,在下方添加所需的代碼。
(2).在編寫事件代碼時,要考慮事件發生的順序,特別要注意以下兩點:
A.在運行表單集或表單時,首先發生的是load事件,在load事件發生時還沒有創建任何對象,因此在load事件中不能對對象做任何處理,比如,在表單的load事件中為表單中的文本框等控件設置屬性是錯誤的。
B.表單中對象的init事件,發生在表單的init事件之前,所以可在表單的init事件代碼中設置表單中的諸如文本框之類的控件的屬性。生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
![]()
上一篇 百度鳳巢系統更新給站長帶來的煩惱