Textbox.Name über For-Schleife ansprechen

  • VB.NET

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

    Textbox.Name über For-Schleife ansprechen

    Hallo,

    ich möchte meine "Messpunkte" mit dem Inhalt einer *.ini-Datei beschreiben.
    Kann mir jemand sagen, wie ich untenstehenden Code eleganter gestalten kann?

    VB.NET-Quellcode

    1. If InStr(lines(a), "[Messpunkt01]") <> 0 Then
    2. Button1.Text = lines(a + 1)
    3. txtIP01.Text = lines(a + 2)
    4. txtR01.Text = lines(a + 3)
    5. txtS01.Text = lines(a + 4)
    6. txtT01.Text = lines(a + 5)
    7. End If
    8. If InStr(lines(a), "[Messpunkt02]") <> 0 Then
    9. Button2.Text = lines(a + 1)
    10. txtIP02.Text = lines(a + 2)
    11. txtR02.Text = lines(a + 3)
    12. txtS02.Text = lines(a + 4)
    13. txtT02.Text = lines(a + 5)
    14. End If
    15. If InStr(lines(a), "[Messpunkt03]") <> 0 Then
    16. Button3.Text = lines(a + 1)
    17. txtIP03.Text = lines(a + 2)
    18. txtR03.Text = lines(a + 3)
    19. txtS03.Text = lines(a + 4)
    20. txtT03.Text = lines(a + 5)
    21. End If



    Meine Lösung sah so aus, gibt mir aber leider "System.NullReferenceException: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."" zurück.

    VB.NET-Quellcode

    1. For i = 0 To 30
    2. For a = 0 To lines.Count - 1
    3. If InStr(lines(a), "[Messpunkt0" & i & "]") <> 0 Then
    4. Me.Controls("Button" & Str(i)).Text = lines(a + 1)
    5. Me.Controls("txtIP" & Str(i)).Text = lines(a + 2)
    6. Me.Controls("txtR01" & Str(i)).Text = lines(a + 3)
    7. Me.Controls("txtS01" & Str(i)).Text = lines(a + 4)
    8. Me.Controls("txtT01" & Str(i)).Text = lines(a + 5)
    9. End If
    10. Next
    11. Next
    @Murdersquad Das ist suboptimal.
    Wenn Du Deine Controls umbenennst, knallt es.
    Wenn Dein INI-Datei-Abschnitt nicht [Messpunkt030] usw. heißt, wird er nicht gefunden (zwei- oder dreistellige Zahlen).
    Pack Deine Controls in je ein Array und arbeite dann mit dem Index:

    VB.NET-Quellcode

    1. Dim btn() = { Button1, Button2, Button3, Button4, Button5 }
    2. ' usw.

    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!
    Dein Lösungsversuch kann schon deshalb nicht klappen, weil der erste Schleifendurchgang schon Murks ergibt:

    VB.NET-Quellcode

    1. For i = 0 To 30
    2. For a = 0 To lines.Count - 1
    3. If InStr(lines(a), "[Messpunkt0" & i & "]") <> 0 Then 'i = 0 -> "[Messpunkt00]"
    4. Me.Controls("Button" & Str(i)).Text = lines(a + 1) 'i = 0 -> Button0 wird gesucht


    Mach Dir aus Button und den TextBoxen ein UserControl, dann kannst Du einfach einem UserControl seine Daten geben und alle UserControls über eine Schleife ansprechen, äquivalent zu RfGs Vorschlag im Vorpost.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo zusammen

    Ich hoffe ich verstosse gegen keine Bordregel - Hier wurde ja gefragt, wie man das besser Programmieren kann.

    30 Datensätze? 120 Control - Wäre das nicht etwas für einen Datatable und einem Datagridview? Speichern in XML Datei und nicht ini? Zudem könnte dann ganz einfach die Menge der Datensätze geändert werden.

    docs.microsoft.com/de-de/dotne…able.readxml?view=net-6.0

    Nur so eine Idee

    LG Panter

    Murdersquad schrieb:

    damit auch Laien etwas anpassen können.
    Laien haben da nix drin verloren, da solltest Du liedber einen schmucken Dialog für bauen, und dann auf XML wechseln.
    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!