VisualFoxpro中對(duì)象的事件

字號(hào):

一.對(duì)象的事件是對(duì)象的動(dòng)作和行為.vfp中對(duì)象的事件可通過用戶操作、程序代碼或系統(tǒng)觸發(fā).只有當(dāng)事件發(fā)生時(shí),事件的程序才會(huì)運(yùn)行.如果沒有任何事件發(fā)生,則整個(gè)程序就處于停滯狀態(tài).比如在第一章所舉的實(shí)例中,運(yùn)行表單后,如果我們什么也不做,則程序處于停頓狀態(tài).我們?cè)赲"半徑\"文本框中輸入一個(gè)半徑,然后單擊\"計(jì)算\"按鈕,則觸發(fā)命令按鈕的click事件,內(nèi)部的代碼得到執(zhí)行,計(jì)算出圓的面積顯示在第二個(gè)文本框中.所以說,vfp程序是由事件驅(qū)動(dòng)的程序.
    二.事件的分類:
    1.鼠標(biāo)事件:所謂鼠標(biāo)事件,就是在vfp應(yīng)用程序的運(yùn)行界面中,用鼠標(biāo)對(duì)其中的對(duì)象進(jìn)行操作所觸發(fā)和事件.
    (1).Click事件:是鼠標(biāo)單擊時(shí)所產(chǎn)生的事件.click事件既可由用戶觸發(fā),也可由執(zhí)行事件的程序代碼觸發(fā).
    (2).Dbclick事件:雙擊鼠標(biāo)時(shí)產(chǎn)生的事件.
    (3).mousedown和mouseup事件:當(dāng)鼠標(biāo)指針指向?qū)ο蟛聪率髽?biāo)左鍵時(shí)觸發(fā)mousedown事件,當(dāng)釋放鼠標(biāo)左鍵時(shí)觸發(fā)mouseup事件.
    (4).mousemove事件:在對(duì)象上移動(dòng)鼠標(biāo)指針時(shí)產(chǎn)生的事件.
    (5).dragdrop事件:用鼠標(biāo)拖動(dòng)對(duì)象時(shí)產(chǎn)生的事件.
    (6).downclick和upclick事件:當(dāng)用鼠標(biāo)單擊組合框、列表框或微調(diào)器的向下箭頭時(shí),觸發(fā)downclick事件;單擊向上箭頭時(shí),觸發(fā)upclick事件.
    2.鍵盤事件keypress:單擊某一鍵時(shí)產(chǎn)生的事件.通常對(duì)獲取焦點(diǎn)的對(duì)象,當(dāng)按下鍵盤鍵并放開時(shí)觸發(fā)keypress事件.參數(shù):鍵ASCⅡ碼,shiftctrlalt狀態(tài)
    其中,shiftctrlalt狀態(tài)為三鍵值的和.shift值為1,ctrl值為2,alt值為4
    3.改變對(duì)象內(nèi)容事件interactivechange:當(dāng)用操作改變對(duì)象內(nèi)容時(shí)交觸發(fā)此事件,比如改變文本框中的內(nèi)容將觸發(fā)文本框的interactivechange事件.
    4.對(duì)象的焦點(diǎn)事件:當(dāng)對(duì)象取得焦點(diǎn)(focus)時(shí),該對(duì)象將成為當(dāng)前活動(dòng)對(duì)象,操作將面向該對(duì)象.若文本框取得焦點(diǎn),光標(biāo)將在文本框中閃爍,指明編輯文本的當(dāng)前位置.當(dāng)命令按鈕獲得焦點(diǎn)時(shí),按鈕框內(nèi)出現(xiàn)虛線框.屬于控件焦點(diǎn)的事件有:獲取焦點(diǎn),失去焦點(diǎn)以及獲取和失去焦點(diǎn)前觸發(fā)的事件.
    (1).獲取焦點(diǎn)事件gotfocus:當(dāng)對(duì)象獲取焦點(diǎn)時(shí)將觸發(fā)gotfocus事件,而獲取焦點(diǎn)的方法可以通過按tab鍵,鼠標(biāo)單擊對(duì)象或?qū)?duì)象使用setfocus方法.注意:只有對(duì)象的enabled和visible屬性為\"真\"(.T.)時(shí),對(duì)象才能獲得焦點(diǎn).
    (2).失去焦點(diǎn)事件lostfocus:當(dāng)對(duì)象失去焦點(diǎn)時(shí)將觸發(fā)該事件.對(duì)象可能因操作失去焦點(diǎn),例如重新選擇對(duì)象或單擊另一對(duì)象;也可能在程序代碼中執(zhí)行獲取焦點(diǎn)的方法setfocus.失去焦點(diǎn)的事件代碼常用于取消gotfocus事件代碼所做的工作,例如取消在執(zhí)行g(shù)otfocus事件過程代碼所提供的指導(dǎo)用戶操作信息.
    (3).when事件:此事件在對(duì)象獲取焦點(diǎn)前發(fā)生.如果when事件返回真值,則對(duì)象可獲取焦點(diǎn);否則對(duì)象不能獲取焦點(diǎn).
    (4).vaid事件:在對(duì)象失去焦點(diǎn)前觸發(fā)此事件,以控制對(duì)象是否真的失去焦點(diǎn).若vaid返回真值,對(duì)象才可失去焦點(diǎn);否則對(duì)象不會(huì)失去焦點(diǎn).
    5.表單事件:
    (1).load事件:load事件在創(chuàng)建表單集或表單之前觸發(fā),其事件過程代碼常用于做表單集或表單的初始化工作.如果是表單集,則先觸發(fā)表單集的load事件,然后觸發(fā)表單的load事件.
    (2).unload事件:unload事件是釋放表單集或表單之前被觸發(fā)的最后一個(gè)事件.在觸發(fā)該事件之前先觸發(fā)表單或表單集的destroy事件,使對(duì)象無(wú)效.例如,釋放表單集時(shí)觸發(fā)的destroy和unload事件順序如下所示:
    表單集destroy→表單destroy→表單中各對(duì)象destroy→表單unload→表單集unload
    (3).activate事件:當(dāng)激活表單等對(duì)象時(shí)觸發(fā)activate事件.通常可在調(diào)用對(duì)象的show方法時(shí)觸發(fā)該事件用來(lái)激活或顯示對(duì)象.
    (4).deactivate事件:當(dāng)容器對(duì)象沒有焦點(diǎn)而處于非活動(dòng)狀態(tài)時(shí)觸發(fā)deactivate事件.常見于當(dāng)激活新對(duì)象時(shí),觸發(fā)原活動(dòng)對(duì)象的deactivate事件,同時(shí)觸發(fā)新對(duì)象的activate事件.
    6.其它事件:
    (1).timer事件:在每次計(jì)時(shí)時(shí)間到達(dá)時(shí)觸發(fā)timer事件,計(jì)時(shí)間隔由timer控件的interval屬性來(lái)指定.
    (2).init事件:在對(duì)象建立時(shí),其init事件被觸發(fā).通常在init事件代碼中編寫有關(guān)對(duì)象的初始化的操作,如加載圖片對(duì)象中的圖片等.對(duì)容器對(duì)象來(lái)說,首先觸發(fā)的是對(duì)象的init事件,然后觸發(fā)容器的init事件.因此,容器的init事件代碼可訪問容器中的每個(gè)對(duì)象.此外,容器中對(duì)象的init事件,與它們被添加到容器中的順序相同.
    (3).destroy事件:在對(duì)象被釋放前觸發(fā)其destroy事件,使該對(duì)象無(wú)效.如果對(duì)象是一個(gè)容器,則首先觸發(fā)其中的對(duì)象的destroy事件,然后觸發(fā)容器對(duì)象的destroy事件.
    (4).error事件:此事件在執(zhí)行對(duì)象的方法程序代碼時(shí)出錯(cuò)時(shí)被觸發(fā).可用該事件的程序代碼處理錯(cuò)誤.
    7.為事件編寫代碼:如果沒有為對(duì)象的某些事件編寫代碼,當(dāng)事件發(fā)生時(shí)系統(tǒng)將不會(huì)發(fā)生任何操作.比如,不給命令按鈕添加任何代碼,運(yùn)行時(shí),用戶即使單擊該命令按鈕,也不會(huì)產(chǎn)生任何操作.
    (1).在設(shè)計(jì)時(shí),要為一個(gè)對(duì)象的某個(gè)事件添加代碼,在需雙擊該對(duì)象,即會(huì)彈出代碼窗口,在該窗口上方的\"過程\"列表中和選擇事件名稱,在下方添加所需的代碼.
    (2).在編寫事件代碼時(shí),要考慮事件發(fā)生的順序,特別要注意以下兩點(diǎn):
    A.在運(yùn)行表單集或表單時(shí),首先發(fā)生的是load事件,在load事件發(fā)生時(shí)還沒有創(chuàng)建任何對(duì)象,因此在load事件中不能對(duì)對(duì)象做任何處理,比如,在表單的load事件中為表單中的文本框等控件設(shè)置屬性是錯(cuò)誤的.
    B.表單中對(duì)象的init事件,發(fā)生在表單的init事件之前,所以可在表單的init事件代碼中設(shè)置表單中的諸如文本框之類的控件的屬性.