9

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

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

4

5 回答 5

22

您必须访问Handle属性(将结果放入虚拟变量或其他东西中)。看反射器;它强制处理创建。

于 2010-07-20T11:07:08.093 回答
5

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

于 2009-11-27T10:29:39.870 回答
2

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

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

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

于 2010-07-20T12:06:56.997 回答
0

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

于 2010-07-20T11:04:28.287 回答
0

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

MethodInfo ch = frm.GetType().GetMethod("CreateHandle", BindingFlags.NonPublic | BindingFlags.Instance);
ch.Invoke(frm, new object[0]);
于 2015-08-07T11:59:53.837 回答