Mehrer TextBoxen in bestimmter Reihenfolge ansprechen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Mehrer TextBoxen in bestimmter Reihenfolge ansprechen

    Hallo,
    es ist eigentlich nur unschön, aber mich stört es.

    Ich habe 30 TextBoxen: txtZ00 bis txtZ29, die alle in einer Linie aneinander gereiht sind und nur 1 Buchstaben beinhalten.
    Sie werden unterschiedlich befüllt, einmal sind 5 oder 10.... mit Text. Die nicht befüllten werden visible = False gemacht.
    Das Unschöne ist nun, dass sie nicht von txtZ00 bis txtZ29 befüllt werden und nach dem unsichtbar machen Lücken entstehen. Mit den TabIndices habe ich es schon probiert, was aber nichts gebracht hat. Die ersten 10 txtZ15 bis txtZ24 habe ich manuell schon soweit, dass sie immer zuerst befüllt werden, aber das ist ja nicht die elegante Lösung!
    Hier der Code, wie sie befüllt werden:

    VB.NET-Quellcode

    1. Dim txt As Control
    2. For Each txt In Me.Controls
    3. If txt.Name.StartsWith("txtZ") = True Then
    4. If Mid(cboVokTrIni.Items(64).ToString, 15 + intZ, 1) <> "" Then txt.Text = Mid(cboVokTrIni.Items(64).ToString, 15 + intZ, 1)
    5. intZ += 1
    6. End If
    7. Next


    Unsichtbar so:

    VB.NET-Quellcode

    1. For Each txt In Me.Controls
    2. If txt.Name.StartsWith("txtZ") = True Then
    3. If txt.Text <> "" Then txt.Visible = True
    4. txt.Top = 40
    5. End If
    6. Next


    Grüße, EliotM
    Man könnte die TextBoxes in eine ListOfT sammeln. Hat den Vorteil, dass die dort lediglich referenziert sind.
    Nun hast du z.B. txtZ00 als Index 0, txtZ01 als Index 1 etc.

    So lässt sich dein Vorhaben besser steuern.

    Ich frage mich gerade, ob da nicht ein anderes Control sinnvoller wäre. Zb. ein DGV oder eine ListBox.

    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „exc-jdbi“ ()

    SpaceyX schrieb:

    was soll den das Ganze letztendlich werden?


    Es werden hier fremdsprachliche Zeichen je nach Sprache angezeigt und können beim Schreiben übernommen werden.


    Man könnte die TextBoxes in eine ListOfT sammeln. Hat den Vorteil, dass die dort lediglich referenziert sind.
    Nun hast du z.B. txtZ00 als Index 0, txtZ01 als Index 1 etc.

    So lässt sich dein Vorhaben besser steuern.

    Ich frage mich gerade, ob da nicht ein anderes Control sinnvoller wäre. Zb. ein DGV oder eine ListBox.


    TextBoxes in eine ListOfT werde ich mal testen. Eine ListBox wird sich wahrscheinlich gleich verhalten.
    Eine DGV wäre mir zu mächtig, probier ich aber.

    Ich danke Euch!

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

    @EliotM eine Frage.

    Wie ist nun die Anordnung der TextBoxes. Sind alle Textboxes vertikal (untereinander) oder horizontal.

    Die DGV hat natürlich auch seine Vorzüge, vor allem können dort Spalten wie auch Zeilen mit Visible beeinflusst werden. Anderseits könnte man es auch über ein Dataset (tDS) lösen.

    Dazu bräuchten wir aber viel mehr Infos zu deinem Vorhaben. Am Besten gleich mit Code und einem Bildle.

    Freundliche Grüsse

    exc-jdbi
    @EliotM Sieht mir nach totalem Fehldesign aus.
    Wäre da nicht ein DataGridView angemessen?
    Oder Du machst die TextBoxen in ein FlowLayoutPanel, da rutscht das Panel zusammen,. wenn Du ein Element rausnimmst.
    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!

    exc-jdbi schrieb:

    Wie ist nun die Anordnung der TextBoxes. Sind alle Textboxes vertikal (untereinander) oder horizontal.


    Sind horizontal.

    Die DGV und TableLayoutPanel wäre sicher eleganter, habe es probiert, aber ich müsste zu viel im Programm ändern und sie nehmen mir zu viel Platz weg.
    Die jetzige Lösung hatte ich vor ca. 20 Jahren in VB6 programmiert und jetzt in VB 2019. Es funktioniert ohne Probleme und inzwischen habe ich die richtige Reihenfolge. Und die bleibt immer so.
    Aber wissen möchte ich schon noch, in welcher Reihenfolge eine For-Next-Schleife sowas abarbeitet?
    Wahrscheinlich nach der Zeichnen-Reihenfolge, aber die weiß ich nicht mehr, da ich es mit Ctrl+C vervielfältigt habe.

    Nochmals vielen Dank - never touch a running system
    Grüße, Franz

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

    EliotM schrieb:

    in welcher Reihenfolge eine For-Next-Schleife sowas abarbeitet?
    In genau der Reihenfolge, die Du programmierst.
    Und:
    Wenn Du schon von VB-Ranz auf VB.NET umsteigst, solltest Du es halt gleich richtig machen.
    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!

    RodFromGermany schrieb:

    In genau der Reihenfolge, die Du programmierst..

    Das habe ich oben schon vermutet......
    Und:
    Wenn Du schon von VB-Ranz auf VB.NET umsteigst, solltest Du es halt gleich richtig machen.

    Umgestiegen bin ich schon vor 10 Jahren! Zudem progge ich nicht nur in VB.
    ….Und wenn man ein altes Programm neu coded, muss man nicht immer die neuesten Erkenntnisse einbauen. Im alten Prg waren nur 10 TextBoxen, da habe ich etwas übertrieben. Aber hier passen sie sehr gut rein, sind klein und funktionieren! Der Aufwand für das Umprogrammieren ist so schon sehr groß, da lasse ich es so wie es funktioniert.
    @Admin: kann geschlossen werden!
    Grüße
    Franz

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „EliotM“ ()

    @EliotM OK.
    Nur: Wenn Du schon was Neues machst, dann eben richtig, nicht halbherzig.
    ====
    Du musst Deinen Thread schließen.
    Doppel-Klicke dazu oben auf das abgerundete Quadrat neben dem Titel.
    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!