2009-05-08 10 views
0

J'ai besoin de l'intPtr pour un formulaire. Control.FromHandle (contrôle) me donne le contrôle d'un handle, mais j'ai besoin de l'opposé - obtenir le handle d'un contrôle. Comment puis-je faire cela?Besoin d'IntPtr pour un formulaire (VB.Net)

Répondre

4

Essayez

Dim handle As IntPtr = someControl.Handle 

Note: Ceci ne fonctionne après la poignée de contrôle est créé. Il y a une fenêtre de temps entre le moment où vous créez un contrôle et quand il est rendu dans une certaine mesure où cette peut retourner IntPtr.Zero

+0

Duh, merci. Fonctionne très bien! Appréciez-le. – Jeff

1

Note: Ceci ne fonctionne après la poignée de contrôle est créé . Il y a une fenêtre de temps entre le moment où vous créez un contrôle et quand il est rendu dans une certaine mesure où cela peut retourner IntPtr.Zero

Je suis en désaccord avec JaredPar à ce sujet: l'accesseur de la propriété poignée appelle CreateHandle si le handle n'est pas encore créé (vous pouvez vérifier avec Reflector). Il est important d'être conscient de cela, car dans certains cas, il pourrait avoir des conséquences inattendues

+0

Vérifiez la méthode dans le réflecteur. Il y a des cas où cela ne créera tout simplement pas un handle. Ce n'est pas garanti mais cela peut arriver dans certaines configurations. – JaredPar

+0

Je dois avouer que je n'avais pas analysé le code de la méthode CreateHandle ... maintenant que je l'ai fait, je trouve cela un peu déroutant, et je ne suis pas sûr qu'il crée toujours le handle. Donc peut-être vous avez raison finalement;) –

+0

@Thomas, il y a un cas de coin éloigné où l'état sous-jacent empêche la création de poignée. Je sais seulement qu'il existe parce que je l'ai déjà frappé parce que j'ai supposé que Handle sera valide avant d'être éliminé. Été ~ 2 ans donc je ne peux pas me rappeler les détails (seulement la douleur :)). – JaredPar