2009-11-27 72 views
6

我目前正在創建一個靜音打印模塊。我正在使用的當前控件是確保控件手柄已經創建(IsHandleCreated)。我做了一切都沒有運氣的作弊。強制創建控制柄

您是否有想法想到如何創建控件的句柄而不在屏幕上顯示任何內容?

回答

4

嘗試重載CreateParams屬性獲取器。在此清除WS_VISIBLE標誌。

+1

我發現this.CreateHandle();工作真的很好(從表格內) – NewfrontSolutions 2014-12-02 15:56:03

0

我通過設置CreationParams的WS_VISIBLE解決了這個煩人的句柄創建問題。您可以覆蓋Control的CreationParams屬性,也可以使用適當的CreateParams實例調用CreateHandle方法。請參閱link

19

您必須訪問Handle屬性(將結果放在一個虛擬變量或其他東西中)。看反光板;它強制處理創作。

+0

哈,它的工作原理。好的提示! – 2012-01-17 03:19:44

+0

謝謝!這就像魅力:) – Mnyikka 2014-01-02 10:51:08

2

我有一些其他控件同樣的問題,使用的方法Control.CreateControl()

private void CheckForExistingHandle(Control control) 
{ 
    if (!control.IsHandleCreated) 
     control.CreateControl(); 
} 

但我不知道它是如何與打印模塊工作。

+5

確保控件的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

+0

@Drahakar這是一個很好的說明:'CreateControl'可能會選擇不創建控件。在MSDN上提到的解決方法是訪問'.Handle'屬性 – 2011-12-16 22:36:55

0

調用私有方法CreateHandle將完成這項工作。

MethodInfo ch = frm.GetType().GetMethod("CreateHandle", BindingFlags.NonPublic | BindingFlags.Instance); 
ch.Invoke(frm, new object[0]);