CallByName - Konsolenanwendung

  • VB.NET

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

    CallByName - Konsolenanwendung

    Hi,

    ich habe schon die SuFu und ausführlich Google benutzt, allerdings komm ich einfach nicht weiter und bin schon langsam am verzweifeln.

    Ich habe eine Konsolenanwendung in der mehrere Subs sind. Dazu kommt ein Array das die Namen der vorhandenen Subs speichert, macht der User jetzt eine Eingabe wird überprüft ob die Eingabe mit einem der im Array angegebenen Strings vorhanden ist.. wenn ja, soll die entsprechende Sub ausgeführt werden..

    Ich möchte das ohne If und Case machen, das wäre zum Schluss nämlich mehrere 100 Zeilen lang und mir zu unübersichtlich.

    Wenn ich CallByName(Me, ...) mache, sagt er mir: "Me" ist innerhalb eines Moduls ungültig.

    Wie kann ich denn dem sagen dass das ne Sub ist auf der er das ausführen soll?



    Ich hoffe ihr versteht mich und ich hab hier jetzt nichts durcheinander gebracht..

    Gruß! :)

    VB.NET-Quellcode

    1. Module Module1
    2. Sub Main()
    3. setCommand(Console.ReadLine())
    4. End Sub
    5. Public Sub setCommand(ByVal commandTotal As String)
    6. Dim availableCommands() As String = {"befehl1", "befehl2", "befehl3"}
    7. For i As Integer = 0 To availableCommands.Length - 1
    8. If commandTotal = availableCommands(i) Then
    9. Console.WriteLine("True! - " & availableCommands(i))
    10. Console.ReadLine()
    11. CallByName(Me, availableCommands(i), CallType.Method)
    12. Else
    13. Console.WriteLine("False!")
    14. End If
    15. Next
    16. End Sub
    17. Public Sub befehl1()
    18. Console.WriteLine("Das war befehl1")
    19. Console.ReadLine()
    20. End Sub
    21. Public Sub befehl2()
    22. Console.WriteLine("Das war befehl2")
    23. Console.ReadLine()
    24. End Sub
    25. Public Sub befehl3()
    26. Console.WriteLine("Das war befehl3")
    27. Console.ReadLine()
    28. End Sub
    29. End Module

    VB.NET-Quellcode

    1. CallByName(Module1, availableCommands(i), CallType.Method)


    "Module1" ist ein Typ und kann nicht als Ausdruck verwendet werden.


    Die Idee hatte ich vorher auch schon ausprobiert, aber wie man sieht funktioniert auch das nicht. :(
    Perfekt! Ich habs nach der Möglichkeit von Warflev gemacht:

    Modul1.vb

    VB.NET-Quellcode

    1. Module Module1
    2. Dim Class1 As New Class1
    3. Sub Main()
    4. Class1.setCommand(Console.ReadLine())
    5. End Sub
    6. End Module


    Class1.vb

    VB.NET-Quellcode

    1. Public Class Class1
    2. Public Sub setCommand(ByVal commandTotal As String)
    3. Dim availableCommands() As String = {"befehl1", "befehl2", "befehl3"}
    4. For i As Integer = 0 To availableCommands.Length - 1
    5. If commandTotal = availableCommands(i) Then
    6. Console.WriteLine("True! - " & availableCommands(i))
    7. Console.ReadLine()
    8. CallByName(Me, availableCommands(i), CallType.Method)
    9. Else
    10. Console.WriteLine("False!")
    11. End If
    12. Next
    13. End Sub
    14. Public Sub befehl1()
    15. Console.WriteLine("Das war befehl1")
    16. Console.ReadLine()
    17. End Sub
    18. Public Sub befehl2()
    19. Console.WriteLine("Das war befehl2")
    20. Console.ReadLine()
    21. End Sub
    22. Public Sub befehl3()
    23. Console.WriteLine("Das war befehl3")
    24. Console.ReadLine()
    25. End Sub
    26. End Class


    Danke an euch!