Mehrere Textfelder dynamisch ansprechen und behandeln

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Flo95.

    Mehrere Textfelder dynamisch ansprechen und behandeln

    Hi,

    ich bin der Flo und neu hier. :S ;)

    Ich hab VB erst vor ca 2 Monaten begonnen zu lernen davor hab ich mich ein paar Jahre lang mit PHP beschäftigt.
    Kann man in VB mehrere Textfelder "dynamisch" abfragen?
    Erklärung:
    In einer Reihe habe ich ca 20 Textfelder und ich hab etwa 15-20 reihen untereinander nun hab ich die Felder in einer Reiche besonders beschriftet (Reihe1Feld1 ... Reihe1Feld20 ... Reihe5Feld1) kann ich die Reihen mit einer Schleife durch gehen oder muss ich den Code "doof" untereinander kopieren?

    In PHP kenn ich das z.b. so

    PHP-Quellcode

    1. $Reihe = "Reihe";
    2. $Feld = "Feld";
    3. while (x < 20) {
    4. $Reihe$x$Feld1 = 2;
    5. $Reihe$x$Feld2 = 9;
    6. $Reihe$x$Feld3 = $Reihe$x$Feld1 + $Reihe$x$Feld2
    7. $x++;
    8. }


    Kann man das in VB ähnlich umsetzen (oder muss ich es wirklich meiner meinung nach doof alles untereinander kopieren und habe es somit schwerer den code nachträglich zu ändern)?

    VB.NET-Quellcode

    1. do while x < 20
    2. Reihe??Feld1.text = 2
    3. Reihe??Feld2.text = 9
    4. Reihe??Feld3.text = Reihe??Feld1.text + Reihe??Feld2.text
    5. x += 1
    6. loop


    Lieben Gruß & Danke
    Flo


    //edit: Ich werde es mal so probieren [VB 2008] Steuerelemente dynamisch ansprechen
    Was ist da wohl sinnvoller ...
    Danke für die schnelle Hilfe habe es schon versuch so umzusetzen. Bin nur auf ein Problem mit der Sortierung gestoßen nach welchen Kriterien sortiert das .Controls die Controls (TabIndex leider nicht, Name (alphabetisch) auch nicht)?


    Ergebnis (aktuell):
    20
    1
    19
    2
    18
    3
    17
    4
    16
    5
    15
    6
    14
    7
    13
    8
    12
    9
    11
    10
    LG
    Flo

    Flo95 schrieb:

    nach welchen Kriterien sortiert das .Controls die Controls
    Wenn mich nicht alles täuscht, in der Reihenfolge, wie sie im Designer hinzugefügt werden, also im Designercode stehen. Bin mir aber grad auch nicht 100% sicher.

    BjöNi schrieb:

    Flo95 schrieb:

    nach welchen Kriterien sortiert das .Controls die Controls
    Wenn mich nicht alles täuscht, in der Reihenfolge, wie sie im Designer hinzugefügt werden, also im Designercode stehen. Bin mir aber grad auch nicht 100% sicher.

    Ok danke für die Info. Hab gerade nachgeschaut und ist eigentlich in der Reihenfolge bzw. kleine unstimmigkeiten (1,2,4,3,5,6,7,..19,20) mhm mal schaun ...
    Genau für sowas gibt es For-Schleifen (For Each, For x = 0 To 20, etc...), statt ein Integer hochzählen lassen zu müssen.
    Außerdem wäre Option Strict On nicht schlecht (lass mich raten: Implizite Konvertierung von Integer zu String in Zeile 3?)
    Du kannst Deine Controls auch in ein Array packen und dann das Array mit For Each abarbeiten:

    VB.NET-Quellcode

    1. Dim MyEdits() As TextBox = {TextBox1, TextBox2, TextBox3, TextBox4, TextBox5}
    2. For Each edit In MyEdits
    3. ' etwas tun
    4. Next
    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!
    Hi,

    danke für eure Infos!
    Am besten gefällt mir die Lösung (mit ner for statt while schleife):

    Leseratte schrieb:

    Nimm doch einfach folgenden Code:

    VB.NET-Quellcode

    1. do while x < 20
    2. Dim xyz As TextBox = DirectCast(Me.Controls("Reihe" & x & "Feld1"), TextBox)
    3. xyz.Text = 2
    4. x += 1
    5. loop


    Müsste funktionieren, ist aber ungetestet!
    Leider bekomme ich nur Folgende Fehlermeldung:

    VB.NET-Quellcode

    1. NullReferenceException wurde nicht behandelt.


    lg flo

    //edit: Code stück wo das Problem auftritt:

    VB.NET-Quellcode

    1. Dim xyz As TextBox = DirectCast(Me.Controls("Fach" & "1" & "SA1"), TextBox)
    2. MessageBox.Show(xyz.Text)


    //edit: Hat sich erledigt ;) musste das zugehörige panel durchs me ersetzen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Flo95“ ()