题
我正在创建一个静音打印模块。我正在使用的当前控件是,它确保已经创建了控件句柄( 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]);
不隶属于 StackOverflow