Textboxen Variabel ansprechen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Vatter.

    Textboxen Variabel ansprechen

    Kleine Grundlagenfrage:

    Wenn ich ne Schleife mache:

    For x = 1 to 3

    und damit verschiedene textboxen auf ihre werte checke, wie mach ich die
    textboxnamen variabel? Also
    Die Textboxen heißen:

    Test1
    Test2
    Test3

    Udn mit der Schleife will ich checken ob in

    Test1 = 0 oder 1
    bei einer 1 soll er test2 checken, bei 0 exit sub

    Test2 = 0 oder 1
    bei einer 1 soll er test3 checken, bei 0 exit sub

    test3
    bei einer 1 soll er msgBox("Kein Platz frei") cmelden, bei 0 exit sub

    spreche ich die dann so an: Test(x) oder wie?

    Lg
    Rikudo
    C# Developer
    Learning C++
    Das "Ansprechen" von Controls über Namen ist ein Holzweg.
    Du solltest die Textchanged-Events nutzen, um deine Werte "0" und "1" auszuwerten und in Variablen speichern. Da es sich offenbar um booleans handelt, wären wohl Checkboxen besser geeignet.
    Die gespeicherten Variablen kannst du dann wie gewünscht auswerten.

    Fiel Fergnügen

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Hey,

    ein Vorschlag. Erstell Dir einfach eine List (Of Textbox), füge die Textboxen, die Du brauchst da hinzu. Alternativ kannst Du auch auf die Controls der Form in einer Schleife zugreifen.

    EDIT: Gehen würd auch ein Dictionary (Of String, TextBox). Dann kannst Du bequem per String-Key auf die entsprechende Textbox zugreifen.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Du könntest es vielleicht so machen:

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Private Sub tryX()
    4. Dim lst As New List(Of TextBox)
    5. With lst
    6. .Add(TextBox1)
    7. .Add(TextBox2)
    8. .Add(TextBox3)
    9. End With
    10. Dim i As Integer = 0
    11. While i < 3
    12. If lst(i).Text = "" Then
    13. i += 1
    14. If lst(i).Text = " " Then
    15. Else
    16. Exit Sub
    17. End If
    18. Else
    19. Exit Sub
    20. End If
    21. End While
    22. End Sub
    23. End Class


    oder besser:

    VB.NET-Quellcode

    1. For Each Control As TextBox In Me.Controls
    2. lst.Add(Control)
    3. Next

    LaMiy schrieb:

    oder besser:
    Da diese Controls bereits zur Entwicklungszeit bereitstehen, geht es auch so:

    VB.NET-Quellcode

    1. Dim la() As TextBox = {TextBox1, TextBox2, TextBox3}
    2. ' oder
    3. Dim li As New List(Of TextBox) From {TextBox1, TextBox2, TextBox3}
    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!

    Rikudo schrieb:

    aber in meinem projekt habe ich nunmal textboxen ;D
    Das mag sein, aber was ist, wenn einer in die Textboxen "Esel", "Rindviech" und "Auerochs" reinschreibt? Soll dann die Messagebox kommen? Sind ja auch alle besetzt. Darum sind für 0 und 1 (=boolean) Checkboxen erfunden worden. Der Austausch der textboxen gegen Checkboxen sollte kein Aufwand sein.
    Aber trotzdem ist das Zwischenspeichern der Werte in einer Variablen allemal besser als mit den Controls rumzufuhrwerken. Etwa so:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. 'zwischengespeicherte Variablen 0/1
    2. Private Bool1, Bool2, Bool3 As Boolean
    3. 'Textchanged-Event für alle 3 Textboxen
    4. Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    5. Handles TextBox1.TextChanged, _
    6. TextBox2.TextChanged, _
    7. TextBox3.TextChanged
    8. 'geänderte Textbox aus sender ermitteln
    9. Dim _tb As TextBox = DirectCast(sender, TextBox)
    10. 'prüfen, ob 1 drinsteht
    11. If _tb.Text = "1" Then
    12. Bool1 = True
    13. Else
    14. _tb.Text = "0" 'bei "Elefant" oder sonstwas für Einträgen
    15. End If
    16. End Sub
    17. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    18. If Bool1 AndAlso Bool2 AndAlso Bool3 Then
    19. MessageBox.Show("Alles besetzt!!")
    20. Else
    21. 'wasanneres
    22. End If
    23. End Sub

    Alles ohne viel Aufwand und Schleife. Deine Bedingung, wann die Messagebox kommen soll, ist eine einfache Und-Verknüfung. das braucht kein Exit Sub

    Fiel Fergnügen

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup: