我目前正在创建一个静默打印模块。我正在使用的当前控件是,它确保控件句柄已经创建(IsHandleCreated
)。我做了一切来欺骗这个,但一点运气都没有。
您是否有想法如何为控件创建句柄而不在屏幕上显示任何句柄?
您必须访问Handle属性(将结果放入虚拟变量或其他东西中)。看反射器;它强制处理创建。
尝试重载CreateParams
属性 getter。在其中清除WS_VISIBLE
标志。
我对其他一些控件也有同样的问题,并使用了以下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]);