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

您是否有想法如何在不在屏幕上显示控件的情况下为控件创建句柄?

有帮助吗?

解决方案

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

其他提示

您必须访问句柄属性(将结果放入虚拟变量或其他内容)。看看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]);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top