如何自動保存和恢復窗體的大小,位置等等的信息

簡介
每次我生成一個新的桌面型程序的時候,我都要在主窗口的關閉事件中寫一些代碼來保存我主窗口一些信息,比如位置,大小,窗體狀態等等,這篇文章中,我們講述瞭如何使用一個簡單的C#類自動完成上面的這些工作. 我在設計這個類的時候,我就考慮到要在使用時候用最少的代碼就可以把這個類加到窗體中,並且能夠從工具箱中把它加到窗體中.
 
 
類是如何工作的
類的名字爲PersitWindowState爲了能更明白理解它的作用,我們先略過它的實現,先來看看它的應用。這個類用起來的非常簡單。下面是一個演說如何把它加到一個窗體中:
 



 




 



 






 
上面就是如何能自動的保存和取出窗體的狀態的所有的代碼,非常短小精悍。我還在PersistWindowState類中添加了其它的一些功能,它可以自動的保存和取出另外的一些信息。窗體添加了兩個事件PersistWindowState.LoadStateEventPersistWindowState.SaveWindowState.這兩個事件發生是,有一個RegistryKey變量,可以在在當註冊表中保存和取出窗體一些信息。下面的代碼演示瞭如何使用這個類的這些功能
 



 



 


 









 

 





 





 






 
 
類是如何實現的
在看完了類PersistWindowState的各種用法之後,讓我們來看看這個類本身的設計.PersistWindowState的關鍵就是可以預訂其他類的事件. 這個類有4個事件,它們是Form.Closing, Control.Resize, Control.Move 和 Form.Load. 當控件的Parent屬性設置以後,就可以從Parent中預訂這四個事件了(記住, Parent在這兒是非常有用的屬性.)
 
窗體的狀態變化會在  Control.ResizeControl.Move中被記錄. Control.Resize允許我們記錄當前窗體的寬度和高度,我們只有在窗體是正常狀態(不是最大化也不是最小化)是纔會記錄這些信息,當窗體是最大化或者是最小化的時候,我們並不記錄這些信息. Control.Move是用來記錄窗體的位置(和上面一樣,窗體在最小化或者最大化時候,也不作記錄)和當前的狀態,
 
 
保持和取出保存信息是在Form.ClosingForm.Load中完成的.當我第一次用 .Net Beta 1版本來實現這個功能的時候,我發現在Form.Load中恢復保存的信息的時候,會使窗體的visiable屬性變化,但是在正式版中再沒有發現這個問題.
 
下面是實現PersistWindowState類的所有代碼:
 






 








 



 





 





 









 












 







 









 











 








 






 






 












 



 






 
你是否注意到有這個屬性AllowSaveMinimized,如果這個屬性被設置爲true,如果窗體在最小化時被關閉,當恢復的時候,它也是最小化. 這也許不是你所要的,所有我們把這個屬性缺省設置爲false.
 
最後,我希望會有人能覺得這個類還比較有用,會有人能從中得到一些的啓示.
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章