Force create handle for Control
Question
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?
Solution
Try to overload CreateParams
property getter. In it clear the WS_VISIBLE
flag.
OTHER TIPS
You have to access the Handle property (put the result in a dummy variable or something). Look in Reflector; it forces handle creation.
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.
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
Calling private method CreateHandle will do the work.
MethodInfo ch = frm.GetType().GetMethod("CreateHandle", BindingFlags.NonPublic | BindingFlags.Instance);
ch.Invoke(frm, new object[0]);