sobota, 16 kwietnia 2016

VB.NET Jak wyczyścić dane z wszystkich tekstbox'ów na formie?

Jak wyczyścić dane z wszystkich tekstbox'ów na formie?


Po dłuższej przerwie czas wrócić do pracy :)
Załóżmy, że na formie mamy 50 tekstbox'ów, czyszczenie ich zawartości w kodzie za pomocą każdorazowego odwołania się do nich było by męczące i zajęło by sporo miejsca w kodzie. Wyglądało by to mniej więcej tak:

        TextBox1.Text = ""
        TextBox2.Text = ""
        TextBox3.Text = ""
        ...
        TextBoxN.text = ""

Można to zrobić w automatyczny sposób np tak:
                For Each a As Control In form1.Controls
                    If TypeOf a Is TextBox Then
                        a.Text = Nothing
                    End If
                Next

Czy nie wygląda to o wiele lepiej ?

Równie dobrze można tak postąpić z innymi  kontrolkami np ProgressBar:

                For Each control As Control In form1.Controls
                    Dim pb As ProgressBar = TryCast(control, ProgressBar)
                    If pb IsNot Nothing Then
                        pb.Value = pb.Minimum
                    End If
                Next

Czasami jednak nie chcemy aby na formie czyściły się wszystkie dane np w przypadku gdy chcemy wyczyścić wszystkie dane z kontrolek Label bo część to opisy a część stanowi wyświetlacz danych.
Najlepszą metodą wówczas jest trzymanie kontrolek (tych w których będziemy zmieniać dane) w kontenerach np TabControl, GroupBox oraz innych. Wtedy stosujemy odniesienie tylko do danego kontenera i tylko w nim działa nasz kod np:
                For Each control As Control In form1.GroupBox1.Controls
                    Dim pb As ProgressBar = TryCast(control, ProgressBar)
                    If pb IsNot Nothing Then
                        pb.Value = pb.Minimum
                    End If
                Next

3 komentarze:

  1. Niby kumam, ale jak to się będzie miało do TabPage1?
    gdzie po obliczeniach mam do czyszczenia :
    TextBox1.Text = ""
    TextBox2.Text = ""
    TextBox3.Text = ""
    TextBox4.Text = ""
    TextBox5.Text = ""
    TextBox6.Text = ""
    TextBox7.Text = ""
    ComboBox1.Text = ""
    TextBox8.Text = ""
    TextBox9.Text = ""
    TextBox10.Text = ""
    ComboBox2.Text = ""
    ComboBox10.Text = ""
    TextBox38.Text = ""
    TextBox39.Text = ""
    TextBox40.Text = ""
    Label58.Hide()
    Label59.Hide()
    Label60.Hide()
    PictureBox8.Hide()

    Jak to rozpisać?

    Pozdrawiam
    andrew

    OdpowiedzUsuń
  2. Jeśli kod wywołujesz w procedurze tej samej formy to mógłby on wyglądać np tak:

    For Each control As Control In Me.TabPage1.Controls
    Dim tx As TextBox = TryCast(control, TextBox)
    If tx IsNot Nothing Then
    tx.Text = ""
    End If
    Next

    OdpowiedzUsuń
    Odpowiedzi
    1. Dzięki za objaśnienie :)

      Pozdrawiam
      andrew

      Usuń