9
votes

Force Créer une poignée pour le contrôle

Je crée actuellement un module d'impression silencieux. Le contrôle actuel que j'utilise est, il s'assure que la poignée de commande est déjà créée ( iShandlecreated ). J'ai tout fait pour tricher cela sans chance du tout.

Avez-vous des idées à l'esprit sur la manière dont puis-je créer une poignée pour le contrôle sans afficher à l'écran?


0 commentaires

5 Réponses :


5
votes

Essayez de surcharger Createparams Propriété Getter. En effet, cliquez sur le drapeau ws_visible .


1 commentaires

J'ai trouvé que cela.creatHandle (); fonctionne vraiment bien (à partir de la forme)



0
votes

J'ai résolu ce problème de création de la poignée gênante par les paramètres WS_Visible de CreationParams. Vous pouvez également remplacer la propriété CreationParams de contrôle ou appeler la méthode CreateHandle avec une instance Creeparams appropriée. Voir le lien


0 commentaires

22
votes

Vous devez accéder à la propriété (mettre le résultat dans une variable factice ou quelque chose). Regarder dans le réflecteur; Il oblige à gérer la création.


0 commentaires

2
votes

J'ai eu le même problème avec d'autres contrôles et j'ai utilisé le Control.Createcontrol () Méthode: xxx

mais je ne sais pas comment il fonctionne avec un module d'impression.


2 commentaires

Assurez-vous que la propriété visible du contrôle est définie sur True ou la poignée ne sera pas créée à partir d'un CreateControl () appel. Voir MSDN .microsoft.com / fr-US / US / Bibliothèque / ... Pour plus d'informations.


@Drahakar C'est une très bonne note: CreateControl Pourraient choisir de ne pas créer le contrôle. La solution de contournement indiquée sur MSDN est d'accéder à la propriété .Handle



0
votes

appeler 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]);


0 commentaires