2009-05-08 7 views
0

Ich brauche das intPtr für ein Formular. Control.FromHandle (Kontrolle) gibt mir die Kontrolle von einem Handle, aber ich brauche das Gegenteil - Holen Sie sich das Handle von einem Steuerelement. Wie mache ich das?Need IntPtr für ein Formular (VB.Net)

Antwort

4

Versuchen

Dim handle As IntPtr = someControl.Handle 

Hinweis: Dies wird nur für die Steuerung nach dem Griff arbeiten wird erstellt. Es gibt ein Zeitfenster zwischen, wenn Sie ein Steuerelement erstellen und wenn es bis zu einem gewissen Grad gemacht wird, wo diese kann zurückkehren IntPtr.Zero

+0

Duh, danke. Funktioniert super! Bin dankbar. – Jeff

1

Hinweis: Dies wird erst nach dem Griff arbeitet für das Steuerelement erstellt wird . Es gibt ein Zeitfenster zwischen, wenn Sie ein Steuerelement erstellen und wenn es bis zu einem gewissen Grad gemacht wird, wo diese zurückkehren IntPtr.Zero

ich mit JaredPar auf diesem zu widersprechen haben: die get-Accessor der Eigenschaft Handle ruft CreateHandle auf, wenn das Handle noch nicht erstellt wurde (Sie können dies mit Reflector überprüfen). Es ist wichtig, sich dessen bewusst zu sein, denn in einigen Fällen könnte es unerwartete Folgen haben

+0

Überprüfen Sie die Methode im Reflektor. Es gibt Fälle, in denen es einfach kein Handle erstellen wird. Es ist nicht garantiert, dass es passiert, aber es kann unter einer bestimmten Konfiguration passieren. – JaredPar

+0

Ich muss gestehen, ich habe den Code der CreateHandle-Methode nicht analysiert ... jetzt, da ich es getan habe, finde ich es ein wenig verwirrend, und ich bin mir nicht sicher, dass es immer den Griff schafft. Vielleicht hast du schließlich recht;) –

+0

@Thomas, es gibt einen weit entfernten Fall, in dem der zugrunde liegende Zustand die Erstellung von Handles verhindert. Ich weiß nur, dass es existiert, weil ich es vorher getroffen habe, weil ich annahm, dass Handle gültig ist, bevor es entsorgt wird. Been ~ 2 Jahre, so kann ich mich nicht an die Details erinnern (nur der Schmerz :)). – JaredPar