代码之家  ›  专栏  ›  技术社区  ›  Marc Vitalis

强制创建控件句柄

  •  9
  • Marc Vitalis  · 技术社区  · 16 年前

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

    您是否考虑过如何在不在屏幕上显示任何控件的情况下为控件创建句柄?

    5 回复  |  直到 10 年前
        1
  •  5
  •   Irshad huMpty duMpty    10 年前

    尽量超载 CreateParams getter属性。在它清楚 WS_VISIBLE 旗帜。

        2
  •  21
  •   wj32    15 年前

    您必须访问 把手 属性(将结果放入虚拟变量或其他内容)。在反射镜中,它强制创建句柄。

        3
  •  2
  •   Oliver    15 年前

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

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

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

        4
  •  0
  •   Ram kiran Pachigolla    13 年前

    我通过设置creationparams的ws_可见来解决这个烦人的句柄创建问题。您可以重写控件的CreationParams属性,也可以使用适当的CreateParams实例调用CreateHandle方法。查看 link

        5
  •  0
  •   NucS    10 年前

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

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