If-Funktion alternative

  • VB.NET

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

    If-Funktion alternative

    Hallo,
    gibt es eine Möglichkeit die folgenden IF-Bedingungen (ist nur ein Ausschnitt) in eine Schleife zu schreiben, damit ich nicht für jedes Textfeld/ComboBox eine If-Bedingung schreiben muss? Es gibt zu jedem Textfeld/ComboBox ein dazugehöriges Label. Dieses soll, wenn die Textbox/ComboBox leer bleibt rot gefärbt werden. Bekomm es nur so hin, aber dies wird sehr lang, deshalb frag ich euch, ob hierfür eine andere Möglichkeit möglich ist. Der boolche Wert "Fehler" soll zeigen, dass ein Eintrag fehlt. Bei Fragen bitte nachfragen. Danke!

    Quellcode

    1. If cboKategorie.Text <> "" Then
    2. lblKategorie.ForeColor = Color.Black
    3. Else
    4. lblKategorie.ForeColor = Color.Red
    5. Fehler = True
    6. End If
    7. If txtStraße.Text <> "" Then
    8. lblStraße.ForeColor = Color.Black
    9. Else
    10. lblStraße.ForeColor = Color.Red
    11. Fehler = True
    12. End If
    13. If txtPLZ.Text <> "" Then
    14. lblPLZ.ForeColor = Color.Black
    15. Else
    16. lblPLZ.ForeColor = Color.Red
    17. Fehler = True
    18. End If
    19. If txtOrt.Text <> "" Then
    20. lblOrt.ForeColor = Color.Black
    21. Else
    22. lblOrt.ForeColor = Color.Red
    23. Fehler = True
    24. End If



    Gruß

    VB.NET-Quellcode

    1. Private Sub Bla()
    2. CheckObject(cboKategorie)
    3. CheckObject(txtStraße)
    4. CheckObject(txtPLZ)
    5. ' ...
    6. End Sub
    7. Private Sub CheckObject(ByRef TextBox xxx) ' TextBox je nach dem
    8. If xxx.Text <> "" Then
    9. xxx.ForeColor = Color.Black
    10. Else
    11. xxx.ForeColor = Color.Red
    12. Fehler = True
    13. End If
    14. End Sub
    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!
    Da müsste es doch etwas mit For Each und DirectCast gegeben haben... Fällt mir jetzt spontan ein, hatte aber die Funktion, alle Controls nach einem Typen gefiltert nacheinander ansprechen zu können. Vielleicht machst du dich mal drüber schlau, dürfte eine mögliche Lösung sein.

    MfG,
    X-Zat / Momo

    //Edit:
    Rod war schneller...

    Du solltest vielleicht auch

    VB.NET-Quellcode

    1. Private Sub CheckObject(ByRef xxx As TextBox) 'Oder System.Windows.Forms.TextBox

    schreiben...
    Andere Möglichkeit wäre, die Prüfung beim TextChanged-Event durchzuführen:

    VB.NET-Quellcode

    1. Private Sub CtrlTextChanged(ByVal sender As Object, ByVal e As System.EventArgs) _
    2. Handles Label1.TextChanged, Label2.TextChanged, Label3.TextChanged, _
    3. TextBox1.TextChanged, TextBox2.TextChanged
    4. With DirectCast(sender, Control)
    5. If .Text.Trim.Length > 0 Then
    6. .BackColor = Color.Green
    7. Else
    8. .BackColor = Color.Red
    9. End If
    10. End With
    11. End Sub
    Wenn ich's richtig verstanden habe, möchte er bei leerem Text das dazugehörige Label markieren.

    VB.NET-Quellcode

    1. Function MarkedEmtpy (ByVal Lbl as Label, ByVal Txt as String) as Boolean
    2. MarkedEmtpy = Txt.IsEmpty
    3. If MarkedEmtpy Then Lbl.ForeColor=Color.Red Else Lbl.ForeColor=Color.Black
    4. End Function
    5. Fehler= MarkedEmpty (lblKategorie, cboKategorie.Text)

    Oder hat das Label eine direkte Verbindung zur Combox?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --