Steuerelement am Sub übergeben?

  • VB.NET

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

    Steuerelement am Sub übergeben?

    Ich möchte gerne ein Steuerlement übergeben im Sub...
    In etwa so?!?!

    Aufruf:

    VB.NET-Quellcode

    1. datum("Kommunikation", Label2.Text)


    Sub:

    VB.NET-Quellcode

    1. Sub datum(ByVal mappe As String, ByVal label As VariantType)
    2. If My.Computer.FileSystem.FileExists("lol\Änderung.txt") Then
    3. label = My.Computer.FileSystem.ReadAllText("lol\Änderung.txt")
    4. Else
    5. label = Now.ToString("dd.MM.yyyy")
    6. End If
    7. End Sub
    Warum als VariantType?

    Aufruf:

    VB.NET-Quellcode

    1. datum("Kommunikation", CType(Label2, System.Windows.Forms.Control))


    Sub:

    VB.NET-Quellcode

    1. Sub datum(ByVal mappe As String, ByRef lbl As System.Windows.Forms.Control)
    2. If My.Computer.FileSystem.FileExists("lol\Änderung.txt") Then
    3. lbl.Text = My.Computer.FileSystem.ReadAllText("lol\Änderung.txt")
    4. Else
    5. lbl.Text = Now.ToString("dd.MM.yyyy")
    6. End If
    7. End Sub


    Erklärung:
    Du übergibst der Sub datum die Kategorie und das Label.
    Das Label wird als Control per Call-by-Reference abgerufen.

    Alle Anderungen, die in der Sub am Label gemacht werden,
    sind nach außen sichtbar, da keine Kopie des Labels, sondern die Position des Labels im Speicher übergeben wird.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „MarcoQuinten“ () aus folgendem Grund: Unnötig??

    Vb6 really??

    Aber du übergibst nicht ein Control in deinem Beispiel, sondern gibst ja die Text-Property an und das ein String.

    Wenn du also dein Subaufruf so realisieren willst, wie angegeben, muss deine Methode so aussehen

    VB.NET-Quellcode

    1. Private Sub Datum(mappe As String, lblText As String)
    Oder mach ne Funktion draus (Sehr einfache Lösung):

    Aufruf:

    VB.NET-Quellcode

    1. Label2.Text = datum("Kommunikation")


    Funktion:

    VB.NET-Quellcode

    1. Function datum(ByVal mappe As String)
    2. If My.Computer.FileSystem.FileExists("lol\Änderung.txt") Then
    3. Return My.Computer.FileSystem.ReadAllText("lol\Änderung.txt")
    4. Else
    5. Return Now.ToString("dd.MM.yyyy")
    6. End If
    7. End Function

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MarcoQuinten“ ()

    @MarcoQuinten: Was soll denn das?
    Wozu übergibst Du das Label als Parameter, wenn es dann in der Funktion nicht verwendet wird?
    Entweder
    Sub und dort das Label.Text setzen
    oder
    Function mit einem PArameter4 weniger.
    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!
    @RodFromGermany
    Ich übergebe das Label, weil ich die Sub bzw. die Funktion universell einsetzbar machen will.

    Wenn ich dort Label.Text setze, gilt das nur für 1 Label.
    Ich habe das so verstanden, dass er das nicht nur mit einem Label machen will.
    Sonst hätte ich das Label ja auch nicht übergeben


    Edit:
    Sh1t du hast recht.