Handler.Exist ?

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Fibonacci.

    Handler.Exist ?

    Hey,
    cih möchte überprüfen, ob meine Prozedur...

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Me.Close
    3. End Sub


    ...einen Handler besitzt, in diesem Falle ja. Ich dachte da an eine If-Abfrage, wie man das mit Dateien machen kann:

    VB.NET-Quellcode

    1. If File.Exist("C:\Test.txt") = True Then
    2. MsgBox("Datei vorhanden!")
    3. Else
    4. MsgBox("Datei existiert nicht!")
    5. End If


    Nur halt statt File nimmt man Handle oder so. Und als Ort (path) gibt man die Prozedur (hier: Button1_Click) an.
    Gibt es da sowas in die Richtung??


    Beste Grüße,
    Fibonacci
    Du kannst von irgendwo

    VB.NET-Quellcode

    1. Button1.PerformClick()

    aufrufen.
    Ansonsten bitte das Problem genauer beschreiben.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    VB.NET-Quellcode

    1. If Handle.Exist(Button1_Click) = True Then
    2. MsgBox("Handle vorhanden!")
    3. Else
    4. MsgBox("Handle existiert nicht!")
    5. End If


    Sprich der guckt nach, ob da...

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Me.Close
    3. End Sub


    ...steht oder die Handle fehlt...

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    2. Me.Close
    3. End Sub


    Nur gibt es Handle.Exist nicht... und genau das brauche ich.
    Ich glaube zu verstehen.
    Nimm Dir eine neue Form, ziehe einen Button drauf und doppelklicke ihn, das System generiert den Button1.Click-Handler.
    Nun geh wieder in die Form und lösche den Button. Sieh Dir den Quelltext an und husch, husch, husch, wie von Zauberhand ist "Handles Button1.Click" verschwunden, weil zwischendurch der Button gelöscht wurde. Ohne dieses "Handles Button1.Click" passiert in der exe gar nix. Du musst einen Handler haben, der zwischen der Oberfläche Deines Programms und Deinem Code vermittelt, wo Du halt auf einen Knopfdruck reagieren kannst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Nein, ich bin kein blutiger Anfänger... :D
    Um es kompliziert auszudrücken, baue ich gerade eine If-Abfrage, die beim Starten meines Programmes überprüft, ob die Handle existiert oder nicht. Dementsprechend wird ein Button umbenannt und ein paar Variablen angepasst. Da ich bei versch. Sprachen nicht den Button1.Text abfragen kann muss ich es über die Handle machen...

    Dodo schrieb:

    If Not Button1.Handle.Equals(IntPtr.Zero) Then

    Das ist zwar auch ein Handle, aber der zugrundeliegende Windows-Handle , und den meint erwohl nicht ;)
    BTT: wenn ich die Frage richtig verstehe, suchst Du die Liste der EventHandler die für das Button1.Click Ereignis ja irgendwo im System gespeichert sein muss.

    Einfache Frage, allerdings kenne ich keine simple Antwort, tut mir leid . Es muss / wird zweifellos über System.Reflection möglich sein diese EventHandlerListe auszulesen, vermutlich mit dem Code:

    VB.NET-Quellcode

    1. Imports System.Reflection
    2. Imports System.ComponentModel
    3. ...
    4. Dim pi As PropertyInfo = Me.Button1.GetType().GetProperty("Events", BindingFlags.Instance Or BindingFlags.NonPublic)
    5. Dim ehl As EventHandlerList = DirectCast(pi.GetValue(Me.Button1, Nothing), EventHandlerList)

    Aber diese EventHandlerList Klasse ist leider etwas sperrig da sie kein IEnumerable implementiert, also müsste man sie weiter per Reflection oder sonstwie bearbeiten und da fehlen mir momentan die Zeit und die Ideen.

    Aber vielleicht hat ja jemand anderes Lust ... :rolleyes: