Sub-Name in String gespeichert -> strSub in anderem Modul aufrufen

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von russi.

    Sub-Name in String gespeichert -> strSub in anderem Modul aufrufen

    Hallo VB-Spezialisten!

    Ich habe ein Formular erstellt, auf dem ich dynamisch zur Laufzeit diverse Buttons einfüge.
    Den entsprechenden EventHandler habe ich immerhin schon hinbekommen.

    Was bisher nicht funktioniert, ist der modul-übergreifende Aufruf der zugewiesenen Sub, sofern sich diese nicht in Form1 befindet (Name und Beschriftung des Buttons sowie Name der Sub sind immer identisch)

    Habe gelesen, dass dies auch mit "System.Reflection" funktionieren soll. Muss aber zugeben, dass ich den Einsatz noch nicht verstehe.

    Kann mir hier jemand helfen? Vielleicht mit einem für Anfänger geeigneten Beispiel?

    Viele Grüße
    Russi

    Hier mein Code bisher (aufs Wesentliche reduzierte Version):

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub GenerateForm()
    3. Dim oSub() As Object = {"Sub1", "Sub2"}
    4. Dim iSub As Integer
    5. Dim b As Button
    6. With Me
    7. .Text = "MeinTitel"
    8. .Width = 520
    9. .Height = 30 * (UBound(oSub) + 2)
    10. End With
    11. For iSub = LBound(oSub) To UBound(oSub)
    12. b = New Button
    13. With b
    14. .Name = CStr(oSub(iSub))
    15. .Text = CStr(oSub(iSub))
    16. ' . ...
    17. End With
    18. AddHandler b.Click, AddressOf b_click
    19. Me.Controls.Add(b)
    20. Next
    21. b = Nothing
    22. End Sub
    23. Private Sub b_click( _
    24. ByVal sender As System.Object, _
    25. ByVal e As System.EventArgs)
    26. Dim str As String
    27. str = Strings.Right(sender.ToString, Len(sender.ToString) - Strings.InStr(sender.ToString, ":") - 1)
    28. ' "Me" ist falsch, Argument ist aber obligatorisch
    29. ' Sub kann sich in beliebigem anderen Modul des Projektes befinden.
    30. CallByName(Me, str, CallType.Method)
    31. 'System.Reflection????
    32. End Sub
    33. End Class
    Hallo, ErfinderDesRades!

    Mein Projekt wächst und wächst, es kommen immer wieder andere/neue Programme dazu. Daher erschien mein Weg mir als die einfachste Lösung (sprechende Sub-Namen, dynamische Generierung der aufrufenden Buttons, ...).

    Zumindest was die laufende Pflege/Aktualisierung angeht - neue Sub in Array eingetragen, fertig.

    Kannst Du mir eine "...bessere Vorgehensweise..." aufzeigen (bin leider noch kein VB-Profi, aber lernwillig!)?

    Viele Grüße
    Russi
    wenn was neues hinzukommt, schreib eine neue Methode.
    Muss das neue per Button angestoßen werden, pack einen weiteren Button aufs Form, und lass ihn die Methode aufrufen.

    Übrigens empfehle ich Menüs, da kann man so viele Buttons wie Lust hat hineinpacken, ohne dass das ganze Form vollgepflastert wird.
    Ja, der Umstieg auf vb.net ist überaus schwierig.
    Weil du kannst komplett alles vergessen, was du dir zuvor in vb6 oder vba etc. angeeignet hattest.

    Grade Umsteiger stehen in der Gefahr, keine Ahnung zu haben, und auch das nicht zu ahnen ;) - und daher u.U. seeehr lange in diesem Zustand zu verbleiben.

    Abhilfe schafft: dieses Buch lesen (hingegen das Galileio-Openbook ist Mist)

    Und daran geht auch kein Weg dran vorbei, denn wenn man bisserl was proggen will muß man die Sprache beherrschen.
    Rumprobieren ist gewissermaßen nachts bei Stromausfall mit ner Taschenlampe in der Großstadt.
    Hingegen bei vernünftig gelernt kennst du auch nicht alles, aber es ist Tag, und du hast einen Stadtplan ;)

    ErfinderDesRades schrieb:

    Weil du kannst komplett alles vergessen, was du dir zuvor in vb6 oder vba etc. angeeignet hattest.
    Du musst es sogar vergessen, weil wenn nicht landest Du im VB.NET-Kompatibilitäts-VisualBasic-NameSpace und Du vergeigst das Lernen von VB.NET. :S
    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!