Array mit textboxen füllen und in schleife Überprüfen?

  • VB.NET

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

    Array mit textboxen füllen und in schleife Überprüfen?

    ich bin ziemlich neuin vb.net und frage mich grade wie man versch textboxen in ein array speichern kann

    VB.NET-Quellcode

    1. dim textboxen(9 as texbox = {tb1.text,tb2.text,tb2.text,usw. }


    wär meine ide dazu, nur wie kann ich dann das array durchgehen, bzw was sind die paramater für die for schleife?
    ich möchte dann jedes textfeld bzw dessen inhalt auf isnumeric , und überprüfen ob dort überhaupt das drinsteht,.
    Kennst du den schon?
    Ein großer Denkfehler in deiner Logik ist die Vernachlässigung der Typen:
    Du legst ein Array vom Typ Textbox an und füllst es mit Strings, die aus den Texteigenschaften der Textboxen kommen.
    Du mußt dir also erstma einig werden: Willst du die Einträge der Textboxen oder die kompletten Textboxen in deinem Array speichern?
    Im ersten Fall reicht ein Dim _Array(n) as String.
    Im zweiten Fall benötigst du etwas mehr:
    Zunächst solltest du eine Schleife zum Erzeugen der Textboxen verwenden. Nutze dann auch die Eigenschaft TB.Name der Textbox, um z.B. mit Tb.Name = "TextBoxNr" & Zählervariable die Textbox später direkt aufrufen zu können.
    Hast du alle benötigten Eigenschaften der TB zugewiesen(Position, Text, evtl. Größe), kannst du sie Deinem Array mit _Array(Zählervariable)=TB zuweisen.
    Nachdem du nun eine TB erzeugt hast, mußt du sie natürlich auch dem übergeordneten Control (z.B. FormXY) hinzufügen mit FormXY.Controls.Add(TB). Damit wird die TB auf der Form angezeigt.
    Dann solltest du noch bedenken, dass du evtl auch bestimmte Events der TB nutzen möchtest. Mit z.B.

    VB.NET-Quellcode

    1. AddHandler TB.TextChanged, AddressOf TB_Textcanged
    2. Sub TB_Textcanged(ByVal sender As Object, ByVal e As EventArgs)
    3. ' Das, wo passieren soll
    4. End Sub
    kannst du das TextCanged-Event der Textbox einer Sub zuordnen. In der Variable Sender wird die Textbox als Objekt übergeben, so dass du abfragen kannst, welche Textbox das Ereignis ausgelöst hat.

    Ich denke, damit hast du erstma zum tun... :D
    Im Forum findest du gewiß auch noch Beispiele zum dynamische Hinzufügen von Steuerelementen.

    Fiel Fergnügen
    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    also mir würde es reichen wenn ich nur die etxte speichern könnte im Array d.h. wahrscheinlich heisst es dann so korrekt

    VB.NET-Quellcode

    1. dim textboxen() as string = {tb1.text, tb2.text usw.}


    nur wie kann ich dieses arry dann dynamisch durchgehen?
    Wenn es ne feste Anzahl von Elementen ist, dann is For i = 0 to irgendwas die 1. Wahl.
    Hast du z.B. eine List(Of T), is ForEach besserer. Auch kannst du mit Foreach die Auflistung der Controls deiner Form durchgehen, mußt dann aber an richtige Tyconvertierung denken (Stichwort DirectCast)
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Da die Fehlermeldung an sich offenbar geheim ist, und meine Kristallkugel mir sagt, dass aus den Textboxen Checkboxen geworden sind, folgender Vorschlag:

    VB.NET-Quellcode

    1. Foreach temp as Checkbox in Me.Controls
    2. If temp.Eneabled Then
    3. 'blub
    4. End If
    5. Next
    Code nicht getestet.
    Erklärung:
    ForEach durchläuft alle Controls vom Typ Checkbox in der Form und übergibt die CB jeweils an die Variable temp. Dabei ist es egal, wie viele CBs das sind.
    Mit

    VB.NET-Quellcode

    1. Dim i as Integer
    2. If temp.Name = "cb" & i then
    3. 'mach was
    4. End If
    5. i +=1
    kannst du den Namen der CB abfragen.
    Was du allerdings mit ...Eneabled willst, is mir unklar. Meine Kristallkugel sagt mir, du meinst ...Checked.
    Fiel Fergnügen
    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    also, ich definiere temp als "typ" checkbox, und gehe dann das komplette me.controls durch,.
    soweit sogut,.
    dann frag ich in der schleife nach namen und status des temp ab, ob das stimmt bzw ob es auf meinen gewünschten checkboxen zutrifft,.

    dann erhalte ich jedoch einen fehler,.

    VB.NET-Quellcode

    1. Dim i As Integer
    2. For Each temp As CheckBox In Me.Controls
    3. If temp.Checked Then
    4. If temp.Name = "cbportd" & i Then
    5. End If
    6. i += 1
    7. End If
    8. Next


    der heisst
    Das Objekt des Typs "System.Windows.Forms.TabControl" kann nicht in Typ "System.Windows.Forms.CheckBox" umgewandelt werden.
    In der Fehlermeldung steht eigentlich alles, was du wissen mußt. ;)
    Die Schleife durchläuft ALLE Controls der Form und versucht sie in eine Checkbox umzuwandeln. Da dort noch eine Tabpage existiert und diese natürlich nicht in eine Checkbox umgewandelt werden kann... :love:
    Also kann man die Schleife allgemeiner halten, so dass alle Controls akzeptiert werden und fragt innerhalb der Schleife den Typ ab. Siehe nachfolgenden getesteten C&P

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim i As Integer
    3. For Each temp As Control In Me.Controls 'Controls der Form
    4. If TypeOf (temp) Is CheckBox Then 'Test auf Typ
    5. Dim CB As CheckBox = DirectCast(temp, CheckBox) 'Typumwandlung mit DirectCast
    6. Debug.Print(CB.Name & " Nr. " & i & " Checked = " & CB.Checked) 'Ausgabe
    7. i += 1
    8. End If
    9. Next
    10. For Each temp As Control In TabPage1.Controls 'Controls der Tabpage
    11. If TypeOf (temp) Is CheckBox Then 'Test auf Typ
    12. Dim CB As CheckBox = DirectCast(temp, CheckBox) 'Typumwandlung mit DirectCast
    13. Debug.Print(CB.Name & " Nr. " & i & " Checked = " & CB.Checked) 'Ausgabe
    14. i += 1
    15. End If
    16. Next
    17. End Sub
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup: