如何正確使用Access的模式窗體
當(dāng)前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
?要想使用Access的模式窗體,就必須對它的特性有充分的理解。 一、什么是模式窗體 例如當(dāng)打開Access的選項窗口后,就只能在該窗口中進(jìn)行操作,在本窗口未被關(guān)閉之前,無法與Access其他窗口進(jìn)行交互。 這種窗體就稱為模式窗體,也可稱為模態(tài)窗口。模式窗體一旦打開,操作焦點就固定到該窗體上,必須首先關(guān)閉模式窗體,才能將焦點移至其他窗口。這是一種強(qiáng)制方式,“強(qiáng)制”用戶先處理當(dāng)前窗口。 在Access中,使用MessageBox宏操作、MsgBox函數(shù)彈出的確認(rèn)對話框,文件(夾)選擇對話框、保存文件對話框,就是模式窗體。我們自定義的登錄窗口通常也需要設(shè)置為模式窗體。 二、怎樣設(shè)置模式窗體 設(shè)置模式窗體有兩種方式,一是通過窗體“模式”屬性,將窗體固定為模式窗體,但是模式屬性要與“彈出方式”(是否顯示為一個獨立的窗口)配合使用。如果“模式”選擇了“是”,“彈出方式”選擇了“否”,則該窗體雖然是模式窗體,但并不能完全阻止Access焦點的轉(zhuǎn)移,例如功能區(qū)還是可以獲取到焦點。 所以要讓窗體完全變成一個模式窗體,要使用彈出窗體。 另一種方式是動態(tài)設(shè)置,在使用OpenForm宏操作(或VBA命令DoCmd.OpenForm),“窗體模式”設(shè)置為“對話框”,就能將窗體在打開時動態(tài)改變窗體模式。這種方法最常使用,它會忽視原窗體“模式”、“彈出方式”屬性的設(shè)置。 使用VBA時的代碼: DoCmd.OpenForm "聯(lián)系人詳細(xì)信息", acNormal, "", "1=0", , acDialog 三、怎樣使用模式窗體 既然有兩種方法將窗體變成模式窗體,我們使用哪種呢? 以上這兩種情形下,結(jié)果會有非常大的區(qū)別,只有理解了才能運用好。 通過屬性將窗體固定為模式窗體方式下,通過導(dǎo)航窗格打開窗體時,該窗體立即以模式狀態(tài)顯示,使用OpenForm命令打開窗體,窗口模式選擇為“普通”,該窗體也會以模式狀態(tài)打開。 但是我們在Access應(yīng)用,極少會使用這種方式,其一是因為在一個應(yīng)用中,我們通常不會直接在導(dǎo)航窗格中打開窗體,其二是固定的方式可能帶來其他問題。 以下是一個按鈕事件中的代碼(使用宏操作),來自于官方模板,任意模板中都有這種代碼: 該事件要完成兩件事:從A窗體打開B窗體、對A窗體刷新并重新定位記錄。那么這里的重點就是打開B窗體時,使用了“對話框”模式(以模式窗體打開)。使用OpenForm+對話框,就會將代碼停止在OpenForm操作,換句話說,在窗體B關(guān)閉之前,后面的代碼不會被執(zhí)行,直至窗體B關(guān)閉,才順序執(zhí)行后續(xù)的代碼。 這里OpenForm如果使用的是“普通”窗口模式(窗體B在屬性中設(shè)置為模式狀態(tài)),那么窗體B也會以模式窗口的方式打開,但是,OpenForm后面的代碼會一起被順序執(zhí)行。 到此你應(yīng)該已經(jīng)理解了,OpenForm+對話框的方式,可以將后續(xù)的動作指令放置在一個子過程中,利用它的特性讓后續(xù)動作實現(xiàn)起來更容易、代碼更簡潔。 應(yīng)用場景非常廣泛,例如打開一個窗體編輯記錄,通過打開的窗體新增組合框的行來源內(nèi)容,打開窗體輸入篩選條件等等,都需要在模式窗體B關(guān)閉后,對原打開它的窗體A有一個信息反饋,使用OpenForm+對話框的動態(tài)方式讓這一系列動作連貫起來,非常方便。 當(dāng)然,如果在模式窗體打開后,不需要反饋信息,也沒有后續(xù)的操作代碼,使用以上兩種方式都可以。 四、模式窗體的局限 使用OpenForm+對話框的方式,雖然優(yōu)勢很明顯,但它會忽視窗體邊框樣式的設(shè)置: 為了得到更好的視覺效果,常常要使用無邊框的窗體樣式,以便設(shè)置成自己的窗體外觀,例如自定義拾色器、日期選擇器等。我們會設(shè)置成操作更快捷、界面更簡單的無邊框窗體,如果該窗體使用OpenForm+對話框的方式打開,那么邊框的設(shè)置就會失效。 為了遷就無邊框窗體,完成同樣一項任務(wù),就需要改變設(shè)計思路、編寫更多的代碼。 END 閱讀原文:原文鏈接 該文章在 2025/1/24 9:20:12 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |