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
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
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
Ü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
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;) –
@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
Duh, danke. Funktioniert super! Bin dankbar. – Jeff