Feststellung der Namen von Labels u.a. nach automatischer Erstellung dieser

  • VB.NET

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

    Feststellung der Namen von Labels u.a. nach automatischer Erstellung dieser

    Hallo Forum,

    Ich versuche mich an VB2010.
    Ich habe eine Frage zur automatischen Erstellung von z.B. Labels oder Richtextboxen.
    In meinem Projekt lasse ich in einer For / Next Schleife mehrere Labels und Richtextboxen
    an bestimmten Plätzen in einer "Forms" platzieren. Das klappt auch ganz gut.

    Die automatisch erstellten Labels möchte ich natürlich später verwenden.
    Ich weiß aber überhaupt nicht, nach welchen Regeln die Labels von VB benahmt werden.

    Also: Mit welcher Befehlsfolge kann ich die Namen nach der Erstellung heraus finden.?

    Hier der Codeschnipsel
    For u As Integer = 1 To laenge
    GroupBox1.Controls.Add(New Label With {.Location = New Point(20, u * 30), .Size = New Size(60, 20), .Text = COMSS(u - 1) & " -->"})
    GroupBox1.Controls.Add(New RichTextBox With {.Location = New Point(80, u * 30), .Size = New Size(250, 20)})
    Next u

    In der Groupbox lasse ich Labels und RichTextBoxen erstellen.

    Danke für eure Hilfe.

    Gruß
    Jürgen
    Auf die Art kannst du die Controls nicht richtig ansprechen. Erstell dir erst ein Array mit den ganzen Labels und den Richtextboxen und füge diese von dort aus zu der Groupbox hinzu. Dann kannst du alle Controls nachher über ihren Index ganz leicht ansprechen:

    VB.NET-Quellcode

    1. Dim labels(laenge) As Label
    2. Dim richtextboxes(leange) As RichTextBox
    3. For u As Integer = 0 To leange
    4. Dim l As New Label With {.Location = New Point(20, u * 30), .Size = New Size(60, 20), .Text = COMSS(u - 1) & " -->"}
    5. labels(u) = l
    6. GroupBox1.Controls.Add(l)
    7. Dim rtb As New RichTextBox With {.Location = New Point(80, u * 30), .Size = New Size(250, 20)}
    8. richtextboxes(u) = rtb
    9. GroupBox1.Controls.Add(rtb)
    10. Next


    Ansprechen über:

    VB.NET-Quellcode

    1. Dim l As Label = labels(<Nummer des Labels>)
    2. Dim rtb As RichTextBox = richtextboxes(<Nummer der Richtextbox>)

    kilampi schrieb:

    Ich weiß aber überhaupt nicht, nach welchen Regeln die Labels von VB benahmt werden.
    A. : Zugriff über Instanz
    "A"

    VB.NET-Quellcode

    1. Public ButtonA as Button
    2. .....
    3. ButtonA = New Button With {.Dock = DockStyle.Bottom, .Text = "Button A"}
    4. Me.Controls.Add(ButtonA)
    5. ButtonA.ForeColor = Color.Green

    Das erfolgt in Visual Studio wenn Du einen Button aus der Toolbox auf Deine Form ziehst. Der entsprechende Code steht in Deiner Form1.Designer.vb.
    B: Zugriff über den Control Container:
    "B"

    VB.NET-Quellcode

    1. ' B: im ControlContainer über Namen ansprechen
    2. Me.Controls.Add(New Button With {.Name = "ButtonB", .Dock = DockStyle.Bottom, .Text = "Button B"})
    3. Me.Controls("ButtonB").ForeColor = Color.Red

    C: über Dictionary oder List(of Control):
    "C"

    VB.NET-Quellcode

    1. ' C: in einer Liste oder Dictionary speichern
    2. Dim btn As New Button With {.Name = "ButtonC", .Dock = DockStyle.Bottom, .Text = "Button C"}
    3. dictControl.Add("ButtonC", btn)
    4. Me.Controls.Add(btn)
    5. dictControl("ButtonC").ForeColor = Color.Blue

    Beachte: bei B+C bekommst Du beim Zugriff erst einmal den Typ Control zurück . Wenn Du also auf die Property MultiLine einer Textbox zugreifen möchtest, so musst Du das entsprechende Objekt zuerst in eine Textbox umwandeln (= Cast).

    Warum willst/musst Du Controls unbedingt dynamisch anlegen ? Und wenn, dann macht es mehr Sinn diese z.B. in ein TableLayoutPanel einzubetten. So sparst Du Dir die ganze Location-Berechnungen.

    Achja ... willkommen im Forum.
    Willkommen im Forum. :thumbup:

    kilampi schrieb:

    Ich habe eine Frage zur automatischen Erstellung von z.B. Labels oder Richtextboxen.
    Könntest Du das ein wenig motivieren?
    Ist das nur eine kleine Spielwiese oder ein ernsthaftes Problem?
    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!
    Vielen Dank für eure Antworten,

    ich bin quasi ein Ur- VB-Anfänger.
    Momentan arbeite ich mich einfach mit Buch, Forum lesen, Tutorials anschauen, nachfragen, fremden Code anschauen
    quasi in die VB-Welt ein.
    Ich habe vor vielen Jahren einiges in Assembler und 8051 Microcontrollern erstellt.
    Damals wie hier in VB ist die grundsätzlich Art der strukturierten Programmierung einfach grundwichtig.
    UND: Es gab und gibt wohl auch heute noch immer viele Wege zum Ziel. Der eine umständlicher+
    der andere smarter.

    Ich bin momentan einfach noch teilweise völlig "im Dunkeln" einfach bei den ganzen "Begrifflichkeiten".
    z.B. "Klassen, Methoden" usw.
    Ich kenne halt "Include-Files, Unterprogramme, Linker, und Compiler.
    Aber hier ist das glaube ich auch immer noch 30 Jahre alte TEchnik nur mit neuen Namen.
    Jedenfalls habe ich das in meinem MS-Buch in den ersten Seiten so gelesen.

    Also zur eigentlichen Frage vom Anfang.
    Das Programm ist nur ein kleiner Teil eines Projektes.
    Ich möchte (was ja im Grunde bis jetzt schon gut fkt) mit einem Mausklick wissen welche COM Schnittstellen
    momentan zur Verfügung stehen und diese dann gleich mit den "SerialPorts" verknüpfen.
    Das klappt auch alles gut.
    Und da eben die Anzahl de COM Schnittstellen immer verschieden sein kann, möchte ich
    eben in einem "Forms" immer nur so viele "Info-Labels" haben wie auch zur Verfügung stehende COMs.
    Eben aus optischen Gründen.

    Ich hatte diese von mir gezeigte Möglichkeit in einem anderen Code gesehen, und empfand diese
    Möglichkeit als sehr effektiv und smart. Eber weil mit wenigen ZEilen das gewünschte im Grunde perfekt erreicht wird.

    Nun ja, ich denke die Möglichkeit mit dem vorherigen ERstellen eines "Label-Arrays" ist wohl auch eine sehr gute möglichkeit
    für meine GEdanken.

    Ich werde in den nächsten Tagen mal weiter üben und testen.

    vielen Dank nochmal. :)

    Gruß
    Jürgen
    Jou.
    Mit einem Einzeiler hast Du alle verfügbaren Ports ausgelesen:

    VB.NET-Quellcode

    1. Dim ports() = System.IO.Ports.SerialPort.GetPortNames()
    Was willst Du da eigentlich noch anzeigen?
    Wie sie initialisiert wurden?
    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!