在用Visual FoxPro(以下簡(jiǎn)稱(chēng)VFP)做系統(tǒng)開(kāi)發(fā)時(shí),我們有時(shí)希望表單在被關(guān)閉前能顯示確認(rèn)信息,給用戶(hù)留有選擇的余地。這在Windows程序中非常普遍,作用也是顯而易見(jiàn)的。在VFP中要實(shí)現(xiàn)此功能,方法也很簡(jiǎn)單。
首先,讓我們來(lái)看一個(gè)VFP表單的卸載步驟:表單在卸載前,首先要詢(xún)問(wèn)表單的QueryUnload事件,然后再卸載表單。也就是說(shuō),QueryUnload事件是表單卸載時(shí)第一個(gè)被觸發(fā)的事件。在 QueryUnload 事件過(guò)程中執(zhí)行 NODEFAULT命令可以阻止表單卸載。這樣我們通過(guò)在QueryUnload 事件中巧妙包含NODEFAULT,就能避免直接卸載表單。
QueryUnload是怎樣被觸發(fā)的呢?當(dāng)在代碼中執(zhí)行 CLEAR WINDOWS,RELEASE WINDOWS 或 QUIT 等命令時(shí)、或者當(dāng)用戶(hù)雙擊控制菜單框時(shí)、或者當(dāng)用戶(hù)從表單的控制菜單中選擇執(zhí)行“關(guān)閉”命令時(shí),都會(huì)觸發(fā)表單的 QueryUnload 事件。
先在表單的QueryUnload事件中包含下面代碼:
*-- 顯示包含“是”、“否”兩個(gè)按鈕的對(duì)話(huà)框
nYesNo = MessageBox("確定要退出嗎?",4+48+256,"提示")
If nYesNo = 6 &&如果選取了“是”,則退出
*-- 退出前要執(zhí)行的代碼寫(xiě)在這里,
*-- 然后執(zhí)行類(lèi)似下面的退出代碼
ThisForm.Release
Else &&選取了“否”,不退出
NODEFAULT
EndIf
這樣當(dāng)有卸載表單的事件發(fā)生時(shí),都會(huì)顯示確認(rèn)要退出的對(duì)話(huà)框:只有選取“是”,才能卸載表單。
這樣做是非常有用的,例如我們?yōu)榱吮苊庹诓僮鞯臄?shù)據(jù)沒(méi)有保存就退出,可以在程序中使用這段代碼,至于如何保存數(shù)據(jù),不同的程序采取的方法不盡相同,這里我們不做詳細(xì)討論。
需要說(shuō)明的是,當(dāng)在代碼中直接執(zhí)行 RELEASE 命令或直接調(diào)用表單的 Release 方法時(shí),不會(huì)觸發(fā) QueryUnload 事件。因此,我們應(yīng)盡量避免在代碼中直接執(zhí)行RELEASE 命令或調(diào)用表單的 Release 方法。取代的方法是,當(dāng)要卸載表單時(shí),轉(zhuǎn)向調(diào)用表單的QueryUnload方法。
例如,我們要在表單中放置一個(gè)標(biāo)題為“退出”的命令按鈕,用來(lái)退出這個(gè)表單,并希望在退出時(shí)能顯示確認(rèn)對(duì)話(huà)框,可以在這個(gè)命令按鈕的Click事件代碼中包含下面的命令:
ThisForm.QueryUnload
本方法在Visual FoxPro 6.0中文版環(huán)境下驗(yàn)證通過(guò),操作系統(tǒng)為Windows 98中文版、Windows NT 4.0中文版。
首先,讓我們來(lái)看一個(gè)VFP表單的卸載步驟:表單在卸載前,首先要詢(xún)問(wèn)表單的QueryUnload事件,然后再卸載表單。也就是說(shuō),QueryUnload事件是表單卸載時(shí)第一個(gè)被觸發(fā)的事件。在 QueryUnload 事件過(guò)程中執(zhí)行 NODEFAULT命令可以阻止表單卸載。這樣我們通過(guò)在QueryUnload 事件中巧妙包含NODEFAULT,就能避免直接卸載表單。
QueryUnload是怎樣被觸發(fā)的呢?當(dāng)在代碼中執(zhí)行 CLEAR WINDOWS,RELEASE WINDOWS 或 QUIT 等命令時(shí)、或者當(dāng)用戶(hù)雙擊控制菜單框時(shí)、或者當(dāng)用戶(hù)從表單的控制菜單中選擇執(zhí)行“關(guān)閉”命令時(shí),都會(huì)觸發(fā)表單的 QueryUnload 事件。
先在表單的QueryUnload事件中包含下面代碼:
*-- 顯示包含“是”、“否”兩個(gè)按鈕的對(duì)話(huà)框
nYesNo = MessageBox("確定要退出嗎?",4+48+256,"提示")
If nYesNo = 6 &&如果選取了“是”,則退出
*-- 退出前要執(zhí)行的代碼寫(xiě)在這里,
*-- 然后執(zhí)行類(lèi)似下面的退出代碼
ThisForm.Release
Else &&選取了“否”,不退出
NODEFAULT
EndIf
這樣當(dāng)有卸載表單的事件發(fā)生時(shí),都會(huì)顯示確認(rèn)要退出的對(duì)話(huà)框:只有選取“是”,才能卸載表單。
這樣做是非常有用的,例如我們?yōu)榱吮苊庹诓僮鞯臄?shù)據(jù)沒(méi)有保存就退出,可以在程序中使用這段代碼,至于如何保存數(shù)據(jù),不同的程序采取的方法不盡相同,這里我們不做詳細(xì)討論。
需要說(shuō)明的是,當(dāng)在代碼中直接執(zhí)行 RELEASE 命令或直接調(diào)用表單的 Release 方法時(shí),不會(huì)觸發(fā) QueryUnload 事件。因此,我們應(yīng)盡量避免在代碼中直接執(zhí)行RELEASE 命令或調(diào)用表單的 Release 方法。取代的方法是,當(dāng)要卸載表單時(shí),轉(zhuǎn)向調(diào)用表單的QueryUnload方法。
例如,我們要在表單中放置一個(gè)標(biāo)題為“退出”的命令按鈕,用來(lái)退出這個(gè)表單,并希望在退出時(shí)能顯示確認(rèn)對(duì)話(huà)框,可以在這個(gè)命令按鈕的Click事件代碼中包含下面的命令:
ThisForm.QueryUnload
本方法在Visual FoxPro 6.0中文版環(huán)境下驗(yàn)證通過(guò),操作系統(tǒng)為Windows 98中文版、Windows NT 4.0中文版。