PicBox zu Laufzeit erstellen und mit Klick Info abfragen....

  • VB.NET

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

    PicBox zu Laufzeit erstellen und mit Klick Info abfragen....

    Moin!

    basierend auf PictureBox Zur laufzeit erstellen habe ich mir ein Feld von PicBoxen erstellt. Hier mein Code:

    VB.NET-Quellcode

    1. Dim indexcount As Integer = 0
    2. Dim PicSize As Integer = 10
    3. Dim AbstandAdd As Integer = PicSize + 3
    4. Dim Start_Y As Integer = 15
    5. Dim Start_X As Integer = 368
    6. Dim picbox(1000) As Windows.Forms.PictureBox
    7. For column As Integer = 1 To 50
    8. For row As Integer = 1 To 20
    9. indexcount += 1
    10. picbox(indexcount) = New Windows.Forms.PictureBox
    11. picbox(indexcount).Name = "picbox" & indexcount.ToString
    12. picbox(indexcount).Tag = indexcount.ToString
    13. picbox(indexcount).Height = PicSize
    14. picbox(indexcount).Width = PicSize
    15. picbox(indexcount).Top = Start_Y + AbstandAdd * row
    16. picbox(indexcount).Left = Start_X + AbstandAdd * column
    17. If _dctNumSearch.ContainsKey(indexcount) = True Then
    18. If _dctNumSearch.Item(indexcount) = True Then
    19. picbox(indexcount).BackColor = Drawing.Color.Green
    20. End If
    21. Else
    22. picbox(indexcount).BackColor = Drawing.Color.Red
    23. End If
    24. picbox(indexcount).Visible = True
    25. Me.Controls.Add(picbox(indexcount))
    26. Next
    27. Next


    Frage: kann man jetzt irgendwie einfach realisieren, dass ich auf die PicBoxen klicken kann und dann eine Meldung mit dem zugehörigen Namen (Wert aus picbox(indexcount).Tag) in einer Messagebox angezeigt bekomme?

    Gruß Jan

    jan99 schrieb:

    auf die PicBoxen klicken
    Dazu brauchst Du den Click- oder MouseDown-Handler, den Du per AddHandler jeder sdieser PBs hinzufügen musst, nimm immer denselben.
    Das Sender-Argument caste nach PictureBox und Du hast Zugriff auf alle Properties der geklickten PB:

    VB.NET-Quellcode

    1. Dim pb As PictureBox = DirectCast(sender, PictureBox)
    2. MessageBox.Show(pb.Tag.ToString)
    ALLERDINGS:
    1000 PictureBoxen sind ein krasses Fehldesign :!:
    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!
    Moin !

    Danke erst einmal.

    1000 PictureBoxen sind ein krasses Fehldesign


    das ist auch nicht für den Super-Regelbetrieb. Wir haben Objekte die im Bereich 1-999 vergeben werden können und ich möchte hier graphisch visualisieren welche vergeben sind und welche nicht.

    Das wird nichst sehr häufig angewandt und wenn sich zeigt, das es stabil läuft (was die anderen Funktionalitäten betrifft) dann kann es auch wieder rausfliegen.

    VB.NET-Quellcode

    1. Dim pb As PictureBox = DirectCast(sender, PictureBox)


    ... das verstehe ich wo das hinkommt. Aber ...

    VB.NET-Quellcode

    1. MessageBox.Show(pb.Tag.ToString)


    was löst die Messagebox aus? Muss das nicht auch noch in eine Funktion xyz - aber deren Namen finde ich in Deinem Code nicht !

    Gruß Jan

    jan99 schrieb:

    was löst die Messagebox aus?
    Das Klick-Event auf die PictureBox:

    VB.NET-Quellcode

    1. pb = New PictureBox
    2. AddHandler pb.Click, AddressOf pb_click
    3. ' ...
    4. Private Sub pb_click(sender As Object, e As EventArgs)
    5. Dim pb As PictureBox = DirectCast(sender, PictureBox)
    6. MessageBox.Show(pb.Tag.ToString)
    7. 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!

    jan99 schrieb:

    graphisch visualisieren


    Für grafische Vorhaben solcher Art kannst Du GDI nutzen.

    mox schrieb:

    wenn der directcast weggelassen wird oder?


    Nein.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o