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