表單和控制項的屬性CreateParams(這真的是一個屬性)很神奇,因為通過它你能夠很方便的控制表單或控制項諸如邊框、最大化最小化關閉按鈕的隱藏、表單的模式化彈窗模式等的一些特性。雖然,CreateParams有者如此巨大的潛力,但是在使用時要相當謹慎,如果你不瞭解CreateParams這個屬性的話,反而會是你在編寫其他代碼的時候非常疑惑。
引用MSDN中對CreateParams的說明:
在你開發的重載控制項中不要重寫這個屬性,通過這個屬性控制控制項的某些風格。只有在你封裝Windows控制項或者想實現某些WinForm沒有提供的風格(比如Layered Window)控制的時候再使用這個屬性。更多資訊請參照MSDN上對CreateWindow方法和CreateWindowEx方法的參數CREATESTRUCT結構體的文檔注釋 。
簡述為何CreateParams能夠實現這樣進階的樣式控制,因為從CreateWindow和CreateWindowEx的名字就可以看出,CreateParam是傳遞給這倆個方法的參數,而這兩個方法又是在表單建立的時候調用的。所以,CreateParam才能夠實現如此強大的樣式控制。
在net開發winform的過程中,我們有時需要對form表單做一些特殊的設定,比如:
隱藏主表單,只顯示右下角的工作列表徵圖
上面的“隱藏主表單”,有多種實現方式,但最為完美和徹底的方法,就是重寫基類表單的CreateParams事件,來實現。
protected override CreateParams CreateParams { get { base.Visible = false; return base.CreateParams; } }
上面的代碼,就是實現方式,非常簡單有效,調試運行,不會看到一個表單(因為表單的Visible可視屬性設定成了false,即表單不可見)。但是,表單的事件Form_Load, Form_Shown, Form_Paint 等是依舊可以使用的。