我目前正在創建一個靜音打印模塊。我正在使用的當前控件是確保控件手柄已經創建(IsHandleCreated
)。我做了一切都沒有運氣的作弊。強制創建控制柄
您是否有想法想到如何創建控件的句柄而不在屏幕上顯示任何內容?
我目前正在創建一個靜音打印模塊。我正在使用的當前控件是確保控件手柄已經創建(IsHandleCreated
)。我做了一切都沒有運氣的作弊。強制創建控制柄
您是否有想法想到如何創建控件的句柄而不在屏幕上顯示任何內容?
嘗試重載CreateParams
屬性獲取器。在此清除WS_VISIBLE
標誌。
我通過設置CreationParams的WS_VISIBLE解決了這個煩人的句柄創建問題。您可以覆蓋Control的CreationParams屬性,也可以使用適當的CreateParams實例調用CreateHandle方法。請參閱link
您必須訪問Handle屬性(將結果放在一個虛擬變量或其他東西中)。看反光板;它強制處理創作。
哈,它的工作原理。好的提示! – 2012-01-17 03:19:44
謝謝!這就像魅力:) – Mnyikka 2014-01-02 10:51:08
我有一些其他控件同樣的問題,使用的方法Control.CreateControl()
:
private void CheckForExistingHandle(Control control)
{
if (!control.IsHandleCreated)
control.CreateControl();
}
但我不知道它是如何與打印模塊工作。
確保控件的visible屬性設置爲true,否則句柄不會從CreateControl()調用創建。有關更多信息,請參閱http://msdn.microsoft.com/en-us/library/system.windows.forms.control.createhandle%28v=VS.90%29.aspx。 – Drahakar 2011-06-03 15:28:57
@Drahakar這是一個很好的說明:'CreateControl'可能會選擇不創建控件。在MSDN上提到的解決方法是訪問'.Handle'屬性 – 2011-12-16 22:36:55
調用私有方法CreateHandle將完成這項工作。
MethodInfo ch = frm.GetType().GetMethod("CreateHandle", BindingFlags.NonPublic | BindingFlags.Instance);
ch.Invoke(frm, new object[0]);
我發現this.CreateHandle();工作真的很好(從表格內) – NewfrontSolutions 2014-12-02 15:56:03