强制创建控制句柄

发布于 2024-08-12 13:54:34 字数 134 浏览 8 评论 0原文

我目前正在创建一个无声打印模块。我当前使用的控件是确保控件句柄已创建(IsHandleCreated)。我想尽一切办法来欺骗这个,但一点运气都没有。

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

I'm currently creating a silent print module. The current control I'm using is, it's making sure that the control handle is already created (IsHandleCreated). I did everything to cheat this with no luck at all.

Do you have ideas in mind on how can I create a handle for the control without displaying any in the screen?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

時窥 2024-08-19 13:54:34

您必须访问 Handle 属性(将结果放入虚拟变量或其他变量中)。查看反射镜;它强制创建句柄。

You have to access the Handle property (put the result in a dummy variable or something). Look in Reflector; it forces handle creation.

红玫瑰 2024-08-19 13:54:34

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

Try to overload CreateParams property getter. In it clear the WS_VISIBLE flag.

一曲琵琶半遮面シ 2024-08-19 13:54:34

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

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

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

I had the same problem with some other controls and used the Control.CreateControl() method:

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

But i don't know how it works with a print module.

楠木可依 2024-08-19 13:54:34

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

I solved this annoying handle creation problem by settings the WS_VISIBLE of CreationParams. You may either override the CreationParams property of Control or call the CreateHandle method with appropriate CreateParams instance. See the link

江挽川 2024-08-19 13:54:34

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

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

Calling private method CreateHandle will do the work.

MethodInfo ch = frm.GetType().GetMethod("CreateHandle", BindingFlags.NonPublic | BindingFlags.Instance);
ch.Invoke(frm, new object[0]);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文