Events für generierte Obkjekte

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

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

    Events für generierte Obkjekte

    Hallo,

    hier eine kurze Frage:

    Ich möchte dynamisch generierten PictureBoxen ein Click Event geben. Mein Problem ist aber, dass ich vorher nicht genau weis, wie viele es gibt. Deshaln werden sie mithilfe einer For (...) Next Scheife generiert. Nun weis ich aber nicht wie ich jede PictureBox einzeln ansteuern kann, d.h., dass jede PictureBox ihr eigenes Event hat.

    Infos zum Code:
    Die Variable "Karte" enthält die ID der entsprechenden Spielkarte.
    "Karten.IDConverter" ist eine Funktion, welche aus den IDs aus Karten ein Bild zurückgibt.
    "Kartenanzeige" ist eine "Dim WithEvents Kartenanzeige As PictureBox" Variable

    VB.NET-Quellcode

    1. For i = 0 To Spielerkarten.GetUpperBound(0)
    2. Karte = Convert.ToInt32(Spielerkarten(i))
    3. Kartenanzeige = New PictureBox
    4. Kartenanzeige.Location = New Point((i * 103), 0)
    5. Kartenanzeige.Size = New Size(103, 150)
    6. Kartenanzeige.SizeMode = PictureBoxSizeMode.Zoom
    7. Kartenanzeige.Image = Karten.IDKonverter(Karte)
    8. Me.Spieler1.Controls.Add(Kartenanzeige)
    9. Next


    Ich hoffe, jemand kann mir helfen.

    (Sorry, falls der Thread hier falsch sein sollte)
    @DS3110 So was:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. ' ...
    3. Kartenanzeige = New PictureBox
    4. AddHandler Kartenanzeige.Click, AddressOf PictureClick
    5. ' ...
    6. End Sub
    7. Private Sub PictureClick(sender As Object, e As EventArgs)
    8. ' Dein Code
    9. End Sub

    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:

    @DS3110 So was:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. ' ...
    3. Kartenanzeige = New PictureBox
    4. AddHandler Kartenanzeige.Click, AddressOf PictureClick
    5. ' ...
    6. End Sub
    7. Private Sub PictureClick(sender As Object, e As EventArgs)
    8. ' Dein Code
    9. End Sub



    Das geht schon in die richtige Richtung, wie ich das meine, mein Problem ist aber, dass man die Karte spielen können muss, daher braucht jede PictureBox ihr eigenes Event. -> Wenn ich also die erste Karte spiele, muss das Event ein anderes sein, als wenn ich die zweite Karte spiele. Auf das Event kann ich aber zugreifen, soweit fuktioniert das schon.

    Wenn ich deinen Code richtig verstehe:

    AddHandler sagt, dass man ein Event hinzufügt und dahinter gibt man an, welches Event es auslöst.
    AdressOf gibt an, wie die Sub heißt, welche bei dem Event ausgeführt werden soll.

    Danke schonmal für die Antwort.
    Bitte unterlass die Vollzitate, die mögen wir hier nicht :!:
    @DS3110 So isses.
    Du hast doch im Eventhandler den Parameter sender, anhand dessen kannst Du Deine PictureBoxen unterscheiden.
    Gib Deinen PictureBoxen bei Erstellung eine sinnige Tag-Property, catse den parameter sender auf Control und frag die Tag-Property ab.
    Feddich. :thumbsup:
    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!
    @DS3110 Sagst Du uns auch, wie Du das gelöst hast, so dass der nächste mit demselben Problem die Lösung findet?
    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!