Label aus einem Panel in einem Panel auslesen(Dynamisch)

  • VB.NET

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

    Label aus einem Panel in einem Panel auslesen(Dynamisch)

    Heey. wie kann ich den Text von dem Label auslesen?

    VB.NET-Quellcode

    1. Dim x As String
    2. Private Sub PB()
    3. Dim p As New Panel
    4. Dim pb As New PictureBox
    5. Dim l As New Label
    6. p.Size = New Size(150, 150)
    7. p.Location = New Point(x, 0)
    8. l.Text = TextBox1.Text
    9. l.Location = New Point(70, 120)
    10. pb.Size = New Size(100, 100)
    11. pb.Location = New Point(0, 0)
    12. pb.Image = Image.FromFile("C:\Users\Jan-Philip\Pictures\RCT3\1.jpg")
    13. p.Controls.Add(l)
    14. p.Controls.Add(pb)
    15. Panel1.Controls.Add(p)
    16. x = x + 160
    17. End Sub
    18. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    19. PB()
    20. End Sub]



    Gruß

    jan

    janphilip schrieb:

    Heey. wie kann ich den Text von dem Label auslesen?

    Indem Du Dir angewöhnst Deinen dynamisch erzeugten Controls einen Namen zu geben , dann kannst Du sie in der Controls-Collection direkt ansprechen:

    VB.NET-Quellcode

    1. ' panel dynamisch erzeugen
    2. Dim pan As Panel = New Panel With {.Name = "Panel1"}
    3. pan.Name = "Panel1"
    4. ' zur Form hinzufügen
    5. Me.Controls.Add(pan)
    6. ' wieder mit Nanem abrufen
    7. Dim c As Control = Me.Controls("Panel1")

    Ausserdem tust Du Dich auf Dauer leichter wenn Du Dich an gewisse Namenskonventionen hältst ...
    Danke!

    Hab aber noch ne Frage :
    Wie kann ich es machen, das ich dann von dem Label, welches in dem panel liegt, welches ich angeklickt habe,
    den text bekomme?,

    VB.NET-Quellcode

    1. Private Sub pb_click()
    2. Dim c As Control = CType(Panel1.Controls.Item(0), Panel).Controls("label")
    3. MsgBox(c.Text)
    4. End Sub


    Gruß

    jan
    heey, also auslesen tue ich das label jetzt so :

    VB.NET-Quellcode

    1. TextBox2.Text = CType(DirectCast(sender, Panel).Controls.Item(0), Label).Text



    Aber es reagiert nur wenn ich auf das Panel drücke, jedoch nicht, wenn ich auf die im panel enthaltene Picturebox drücke!
    Habe schon einiges versucht, aber bekomms nicht hin!



    Gruß


    jan
    Ersteinmal: Casten musst Du nur , wenn Du Eigenschaften abrufen musst die nicht zu den allgemeinen Control Properties gehören. Text und Controls Collection haben alle Controls, also ist Casten mit CType,DirectCast hier überflüssig.

    janphilip schrieb:

    ber es reagiert nur wenn ich auf das Panel drücke, jedoch nicht, wenn ich auf die im panel enthaltene Picturebox drücke!

    Vermutlich weil Du nur einen Panel.Click behandelst und nicht den Picturebox.Click.

    Zeig einmal Deine AddHandler Zuweisungen.
    Ja, also...

    wenn ich beim Addhandler dem click auf die Picturebox zuweise, kommt das :

    VB.NET-Quellcode

    1. Das Objekt des Typs "System.Windows.Forms.PictureBox" kann nicht in Typ "System.Windows.Forms.Panel" umgewandelt werden.

    VB.NET-Quellcode

    1. AddHandler pbox.Click, AddressOf dynpbox_click

    VB.NET-Quellcode

    1. Private Sub dynpbox_click(ByVal sender As Object, ByVal e As System.EventArgs)
    2. TextBox2.Text = CType(DirectCast(sender, Panel).Controls.Item(0), Label).Text
    3. End Sub



    Gruß

    jan
    weil du in deiner Prozedur den sender (hier eine Picturebox) versuchst in ein Panel zu konvertieren via CType. Aber der sender soll variieren, d.h. dass du das Panel anders herausfinden musst.