Force create handle for Control

China☆狼群 提交于 2019-12-04 02:59:50

问题


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?


回答1:


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




回答2:


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




回答3:


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.




回答4:


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




回答5:


Calling private method CreateHandle will do the work.

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


来源:https://stackoverflow.com/questions/1807921/force-create-handle-for-control

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!