1、如何獲得一個視窗的控制代碼?
例如擷取視窗PictureBox控制項(其他控制項也可以)的控制代碼,
IntPtr handle = pictureBox.Handle;
2、注意:視窗建立和視窗建立完畢即有控制代碼完全是兩回事!!!
視窗建立時,視窗並沒有建立控制代碼,只有Application.Run(form)或者form.Show()之後才有控制代碼,即視窗只有顯示或者啟動訊息迴圈後才有控制代碼!如果建立form之後Form form = new Form(),主線程中調用form.Handle,如果控制代碼尚未建立,引用該屬性將強制建立控制代碼,對系統內的邏輯將產生致命的影響。
3、如何判斷一個視窗的控制代碼建立完畢?
利用IsHandleCreated 屬性:此屬性指示控制項是否有與他關聯的控制代碼,如果已經為控制項分配了控制代碼,則為 true;否則為 false。
4、一些屬性:
(1)、CreateControl :強制建立控制項,包括控制代碼和任何子控制項
(2)、CreateHandle :為該控制項建立控制代碼,
通常,不應該直接調用 CreateHandle 方法。首選的方法是調用 CreateControl 方法,此方法在建立控制項時強製為該控制項及其子控制項建立一個控制代碼。給繼承者的說明 在衍生類別中重寫 CreateHandle 時,請確保調用了基類的 CreateHandle 方法,以便確保已建立該控制代碼。
(3)、DestroyHandle :毀壞與該控制項關聯的控制代碼
(4)、FromChildHandle :檢索包含指定控制代碼的控制項
(5)、FromHandle :返回當前與指定控制代碼關聯的控制項
(6)、Handle :擷取控制項綁定到的視窗控制代碼,Handle 屬性的值是 Windows HWND。如果控制代碼尚未建立,引用該屬性將強制建立控制代碼。
(7)、IsHandleCreated :指示控制項是否有與他關聯的控制代碼,如果已經為控制項分配了控制代碼,則為 true;否則為 false。
(8)、RecreateHandle :強製為控制項重新創製控制代碼
(9)、RecreatingHandle :指示當前是否在重創控制代碼
5.注意:
控制代碼是隨機量,兩次運行一般都會得到兩次不同的結果