Ansprechen eines Labels auf einer Tabpage während Laufzeit

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

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Axxxxxl.

    Ansprechen eines Labels auf einer Tabpage während Laufzeit

    Hallo,

    Ich komme nicht weiter und bitte um Hilfe. Ich habe ein Tabcontrol ("tab_main) mit mehreren TabPages (u.a. "tp_ma54") die wiederum u.a. ein Label "lbl_fa54" enthält welches zur Laufzeit Daten anzeigen soll.
    Wenn ich nun den Timer aktiviere, der die Daten ausliest und zur Anzeige bringen soll, bekomme ich einen "...NullReference..." Objektfehler.

    Ich habe verschiedene Möglichkeiten versucht, aber keine funktioniert. Als das Label in einer früheren Programmversion noch in einer Groupbox war, hat das einwandfrei funktioniert?!

    Alle folgenden Versuche enden im selben Fehler:

    VB.NET-Quellcode

    1. 'die Variable ma_nummer wird korrekt geliefert!!
    2. tb_main.Controls("tp_ma" & ma_nummer).Controls("lbl_fa" & ma_nummer).Text = "Test"
    3. Controls("tp_ma" & ma_nummer).Controls("lbl_fa" & ma_nummer).Text = "Test"
    4. Controls("lbl_fa" & ma_nummer).Text = "Test"


    Ist es möglich, dass ich dieses Label auf einer Tabpage zur Laufzeit füttere?!?
    ==> seid .net zueinander :D <3 <==

    Axxxxxl schrieb:

    zur Laufzeit
    Klar.
    Nur Dein Zugriff über einen berechneten Namen ist etwas daneben.
    Die Instanz des Labels ist ja in der Form direkt zugreifbar, da musst Du nicht über das TabControl gehen.
    Fang an und schreib den Namen des Labels direkt hin:

    VB.NET-Quellcode

    1. lbl_fa01.Text = "Test"

    Dann teste so was:

    VB.NET-Quellcode

    1. Dim lbl() = { lbl_fa01, lbl_fa02, lbl_fa03, lbl_fa04 }
    2. lbl(ma_nummer).Text = "Test"
    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!
    Ich habe es jetzt per Testbutton so versucht:

    VB.NET-Quellcode

    1. Private Sub btn_test2_Click(sender As Object, e As EventArgs) Handles btn_test2.Click
    2. Dim ma_nummer As Integer = 54
    3. Dim lbl() = {lbl_fa54, lbl_fa55}
    4. lbl(ma_nummer).Text = "Test"
    5. End Sub


    Das endet mit dem Fehler:
    Ein Ausnahmefehler des Typs "System.IndexOutOfRangeException" ist in CCL Production Control.exe aufgetreten.
    Zusätzliche Informationen: Der Index war außerhalb des Arraybereichs.

    ;( 8|
    ==> seid .net zueinander :D <3 <==

    Axxxxxl schrieb:

    IndexOutOfRangeException
    :cursing:
    Wie viele Elemente hat Dein Array?
    Wie groß also kann ma_nummer maximal sein?
    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!

    Axxxxxl schrieb:

    vermutet
    In Deinem Beispiel hast Du ein Array mit 2 Einträgen, die Indizes lauten also 0 oder 1.
    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!
    Ah ok, das funktioniert. Ich muss also den realen Maschinennummern dann prinzipiell eine Reihenfolge zuweisen im Sinne von:
    54=0
    55=1
    56=2

    und beziehe mich dann auf die ArrayNummern.

    Aber ich muss trotzdem nochmal fragen. Wieso kann ich ein Label in einer GroupBox mit

    VB.NET-Quellcode

    1. Controls("grpbox" & ma_nummer).Controls("lbl_fa" & ma_nummer).Text = "Test"

    ansteuern, aber wenn es sich wie du sagst in meinem jetztigen Falle direkt auf dem Formular bzw. einer Tabpage befindet, nicht. Das erschließt sich mir nicht an was

    VB.NET-Quellcode

    1. Controls("lbl_fa" & ma_nummer).Text = "Test"
    da scheitert?!
    ==> seid .net zueinander :D <3 <==

    Axxxxxl schrieb:

    scheitert
    Zugriff über berechnete Namen ist einfach ein NoGo.
    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!