簡介
每次我生成一個新的桌面型程序的時候,我都要在主窗口的關閉事件中寫一些代碼來保存我主窗口一些信息,比如位置,大小,窗體狀態等等,這篇文章中,我們講述瞭如何使用一個簡單的C#類自動完成上面的這些工作. 我在設計這個類的時候,我就考慮到要在使用時候用最少的代碼就可以把這個類加到窗體中,並且能夠從工具箱中把它加到窗體中.
類是如何工作的
類的名字爲
PersitWindowState
,
爲了能更明白理解它的作用,我們先略過它的實現,先來看看它的應用。這個類用起來的非常簡單。下面是一個演說如何把它加到一個窗體中:上面就是如何能自動的保存和取出窗體的狀態的所有的代碼,非常短小精悍。我還在PersistWindowState類中添加了其它的一些功能,它可以自動的保存和取出另外的一些信息。窗體添加了兩個事件
PersistWindowState.LoadStateEvent
和PersistWindowState.SaveWindowState
.這兩個事件發生是,有一個RegistryKey
變量,可以在在當註冊表中保存和取出窗體一些信息。下面的代碼演示瞭如何使用這個類的這些功能類是如何實現的
在看完了類
PersistWindowState
的各種用法之後,讓我們來看看這個類本身的設計.PersistWindowState
的關鍵就是可以預訂其他類的事件. 這個類有4個事件,它們是Form.Closing, Control.Resize, Control.Move 和 Form.Load. 當控件的Parent
屬性設置以後,就可以從Parent
中預訂這四個事件了(記住, Parent
在這兒是非常有用的屬性.)
窗體的狀態變化會在
Control.Resize
和Control.Move
中被記錄.
Control.Resize
允許我們記錄當前窗體的寬度和高度,我們只有在窗體是正常狀態(不是最大化也不是最小化)是纔會記錄這些信息,當窗體是最大化或者是最小化的時候,我們並不記錄這些信息. Control.Move
是用來記錄窗體的位置(和上面一樣,窗體在最小化或者最大化時候,也不作記錄)和當前的狀態,保持和取出保存信息是在
Form.Closing
和Form.Load
中完成的
.
當我第一次用 .Net Beta 1版本來實現這個功能的時候,我發現在Form.Load
中恢復保存的信息的時候,會使窗體的visiable屬性變化,但是在正式版中再沒有發現這個問題.下面是實現
PersistWindowState
類的所有代碼:你是否注意到有這個屬性
AllowSaveMinimized
,如果這個屬性被設置爲true,如果窗體在最小化時被關閉,當恢復的時候,它也是最小化. 這也許不是你所要的,所有我們把這個屬性缺省設置爲false.最後,我希望會有人能覺得這個類還比較有用,會有人能從中得到一些的啓示.