Werte von Button übergeben an einen Sub

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von mrMo.

    Werte von Button übergeben an einen Sub

    Hallo zusammen,

    ich habe auf meiner Form mehrere Buttons. Mit den Buttons konfiguriere ich meine Netwerkkarte.
    Bisher hatte ich es immer so gemacht, dass ich den kompletten Code für die Konfiguration der IP usw. in jeden Button hatte.

    Da aber mein Code immer länger wird und man sich auch weiterbilden möchte, würde ich nun das ganze in einen Sub auslagern.
    Hier liegt nun auch mein Problem :
    Wie übergebe ich die Werte an einen Sub?
    Verstehe ich es richtig, dass ich auf einen normalen "Sub" wie in meinem Code nur von dieser Form zugreifen kann und wenn ich es als "Public Sub" machen würde, dann kann ich auch von einer anderen Form darauf zugreifen?

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Net.NetworkInformation
    3. Imports System.Management
    4. Public Class Form1
    5. Private Sub ButtonFesteIPatHome_Click(sender As Object, e As EventArgs) Handles ButtonFesteIPatHome.Click
    6. Dim IPAddress As String = "192.168.1.2"
    7. Dim SubnetMask As String = "255.255.255.0"
    8. Dim Gateway As String = "192.168.1.1"
    9. IPaendern()
    10. End Sub
    11. Sub IPaendern()
    12. Dim IPAddress As String = "192.168.1.2"
    13. Dim SubnetMask As String = "255.255.255.0"
    14. Dim Gateway As String = "192.168.1.1"
    15. Dim objMC As ManagementClass = New ManagementClass("Win32_NetworkAdapterConfiguration")
    16. Dim objMOC As ManagementObjectCollection = objMC.GetInstances()
    17. For Each objMO As ManagementObject In objMOC
    18. If (Not CBool(objMO("IPEnabled"))) Then
    19. Continue For
    20. End If
    21. Try
    22. Dim objNewIP As ManagementBaseObject = Nothing
    23. Dim objSetIP As ManagementBaseObject = Nothing
    24. Dim objNewGate As ManagementBaseObject = Nothing
    25. objNewIP = objMO.GetMethodParameters("EnableStatic")
    26. objNewGate = objMO.GetMethodParameters("SetGateways")
    27. 'tGateway
    28. objNewGate("DefaultIPGateway") = New String() {Gateway}
    29. objNewGate("GatewayCostMetric") = New Integer() {1}
    30. 'IP und Subnet
    31. objNewIP("IPAddress") = New String() {IPAddress}
    32. objNewIP("SubnetMask") = New String() {SubnetMask}
    33. objSetIP = objMO.InvokeMethod("EnableStatic", objNewIP, Nothing)
    34. objSetIP = objMO.InvokeMethod("SetGateways", objNewGate, Nothing)
    35. Catch ex As Exception
    36. MessageBox.Show("Fehler : " & ex.Message)
    37. End Try
    38. Next objMO
    39. End Sub
    Ja, Sub X oder Private Sub X sind nur innerhalb des Formulars verfügbar, Public Sub X auch von außerhalb (Form1.X). Ich lege allgemeine Subs aber immer in ein Modul anstatt in ein Formular. Diese müssen dort natürlich auch als Public deklariert sein.

    Wegen der Werteübergabe: Welche Werte möchtest du denn übergeben?

    Aber allgemein geht das so:

    VB.NET-Quellcode

    1. Public Sub Test(Test As String)
    2. MessageBox.Show(Test)
    3. End Sub

    Beim Button:
    Test("Hallo Welt")

    Edit: Nach nochmaligem Drüberschauen über deinen Code habe ich die Werte entdeckt, die du übergeben möchtest. ;)

    VB.NET-Quellcode

    1. Private Sub ButtonFesteIPatHome_Click(sender As Object, e As EventArgs) Handles ButtonFesteIPatHome.Click
    2. IPaendern("192.168.1.2", "255.255.255.0", "192.168.1.1")
    3. End Sub
    4. Public Sub IPaendern(IPAddress As String, SubnetMask As String, Gateway As String)
    5. '...
    6. End Sub

    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Noch mehr Ordnung kommt rein, wenn man Business Logik nicht in irgendwelchen Forms hat, sondern in einer eigenen Klasse. In den Forms sollte nach Möglichkeit eigentlich nur Logik drin sein bzgl. dem Anzeigen und entgegennehmen von Daten, nicht aber deren Verarbeitung.

    Schau mal hier wird das Thema Architektur behandelt...
    WinForms Projektentwicklung bzgl. der Rolle des Formulars
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen