强制创建控件的句柄

我目前正在创建一个静音打印模块。 我正在使用的当前控件是,它确保已经创建了控件句柄( IsHandleCreated )。 我做了一切来欺骗这一点,没有运气。

您是否有想法如何创建控件的句柄而不在屏幕上显示任何内容?

尝试重载CreateParams属性getter。 在其中清除WS_VISIBLE标志。

您必须访问Handle属性(将结果放入虚拟变量或其他内容)。 看看Reflector; 它强制处理创建。

我与其他一些控件有同样的问题,并使用Control.CreateControl()方法:

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

但我不知道它如何与打印模块一起使用。

我通过设置CreationParams的WS_VISIBLE来解决这个烦人的句柄创建问题。 您可以覆盖Control的CreationParams属性,也可以使用适当的CreateParams实例调用CreateHandle方法。 请参阅链接

调用私有方法CreateHandle将完成工作。

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