Forcer la création d'une poignée pour le contrôle
Question
Je crée actuellement un module d'impression silencieuse. Le contrôle actuel que j'utilise est qu'il s'assure que le descripteur de contrôle est déjà créé ( IsHandleCreated
). J'ai tout fait pour tromper cela sans aucune chance.
Avez-vous des idées en tête sur la façon de créer une poignée pour le contrôle sans en afficher d’écran?
La solution
Essayez de surcharger la propriété CreateParams
. Cochez la case WS_VISIBLE
.
Autres conseils
Vous devez accéder à la propriété Handle (placez le résultat dans une variable muette ou quelque chose du genre). Regardez dans le réflecteur; il force la création de la poignée.
J'ai eu le même problème avec d'autres contrôles et j'ai utilisé le Control.CreateControl ()
:
private void CheckForExistingHandle(Control control)
{
if (!control.IsHandleCreated)
control.CreateControl();
}
Mais je ne sais pas comment cela fonctionne avec un module d'impression.
J'ai résolu ce problème ennuyeux de création de descripteurs en définissant le paramètre WS_VISIBLE de CreationParams. Vous pouvez remplacer la propriété CreationParams de Control ou appeler la méthode CreateHandle avec l'instance CreateParams appropriée. Voir le lien
L'appel de la méthode privée CreateHandle fera le travail.
MethodInfo ch = frm.GetType().GetMethod("CreateHandle", BindingFlags.NonPublic | BindingFlags.Instance);
ch.Invoke(frm, new object[0]);