Bilder zählen aus verschiedenen Pictureboxen

  • VB.NET

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

    Bilder zählen aus verschiedenen Pictureboxen

    Guten Morgen zusammen...

    Vorab euch allen erstmal einen schönen Weihnachtstag sowie schöne Feiertage.

    So und nun zu meinem Anliegen.
    Es geht um das zählen von Bildern.
    So der Ablauf:
    - Ich habe 9 Pictureboxen.
    - In jede Box wird jeweils ein Bild, per Zufall aus den Resources eingefügt (Am Anfang sind alle PB leer) , via Button Click
    - Insg. sind es 5 verschiedene Bilder aus denen gewählt wird per zufall.
    - Nun möchte ich diese zählen.

    Wie ??? Pixelabgleich ist nicht nötig, da es komplett unterschiedliche Bilder aus den Resources sind.
    Sprich, sollte 4 x ein Bild von mir auftauchen :D dann möchte ich eine 4 in einem Label wieder geben.

    Wer kann mir helfen?

    Danke im Vorraus und einen schönen Weihnachtstag weiterhin.
    Gibt der Picturebox.Tag Property einen eindeutigen Wert (BildID) beim zuweisen des Bildes.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Wie läuft es denn bei Dir ab? Ich tippe mal ein großes Select Case. Und dann ist die Sache einfach. Einfachste, aber auch naja-Variante:

    VB.NET-Quellcode

    1. Dim ZählerFürBild1 = 0, ZählerFürBild2 = 0, ZählerFürBild3 = 0, ZählerFürBild4 = 0, ZählerFürBild5 = 0
    2. Private Sub ErzeugeBild(ZielPicBox As PictureBox)
    3. Select Case ErzeugeZufallszahlZwischen1Und5
    4. Case 1: ZielPicBox.Image = My.Resources.Bild1: ZählerFürBild1 += 1
    5. Case 2: ZielPicBox.Image = My.Resources.Bild2: ZählerFürBild2 += 1
    6. Case 3: ZielPicBox.Image = My.Resources.Bild3: ZählerFürBild3 += 1
    7. Case 4: ZielPicBox.Image = My.Resources.Bild4: ZählerFürBild4 += 1
    8. Case 5: ZielPicBox.Image = My.Resources.Bild5: ZählerFürBild5 += 1
    9. End Select
    10. End Sub

    Ich vermute, dass Du den Code problemlos auf Deinen vom Sinn her übertragen kannst.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @Otti Oder so:

    VB.NET-Quellcode

    1. Dim images() As Bitmap = {My.Resources.Picture1, My.Resources.Picture2, My.Resources.Picture3, My.Resources.Picture4, My.Resources.Picture5}
    2. For i = 0 To 9
    3. Dim index = rnd.Next(5)
    4. ' mit Index was tun, z.B. merken
    5. Next
    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 täte auch Control.Tag als "Zwischenspeicher" nutzen.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Rand As New Random
    3. Private Bitmaps() As Bitmap
    4. Private PictureBoxes() As PictureBox
    5. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    6. Bitmaps = New Bitmap(4) {}
    7. Bitmaps(0) = New Bitmap(10, 10)
    8. Bitmaps(1) = New Bitmap(10, 10)
    9. Bitmaps(2) = New Bitmap(10, 10)
    10. Bitmaps(3) = New Bitmap(10, 10)
    11. Bitmaps(4) = New Bitmap(10, 10)
    12. PictureBoxes = {PictureBox1, PictureBox2, PictureBox3, PictureBox4, PictureBox5, PictureBox6, PictureBox7, PictureBox8, PictureBox9}
    13. RandomizeImages()
    14. End Sub
    15. Private Sub RandomizeImages()
    16. For i As Integer = 0 To PictureBoxes.Length - 1
    17. Dim index As Integer = Rand.Next(0, 5)
    18. PictureBoxes(i).Image = Bitmaps(index)
    19. PictureBoxes(i).Tag = index
    20. Next
    21. For Each g In PictureBoxes.ToList().GroupBy(Function(c) c.Tag).OrderByDescending(Function(k) k.Count)
    22. Debug.WriteLine("{0} {1}", g.Key, g.Count())'g.Key = Wert, g.Count Anzahl vorkommen
    23. Next
    24. End Sub
    25. End Class

    Hey zusammen.
    Irgendwie verstehe ich das nicht
    Also ich lade mir die Zufallsbilder so:

    VB.NET-Quellcode

    1. Dim Ausspielungsbilder() As Image = {My.Resources.Spiel1_Kirsche, My.Resources.Spiel1_Zitrone, My.Resources.Spiel1_Pflaume, My.Resources.Spiel1_Kiwi, My.Resources.Spiel1_Gold}
    2. Select Case CurrentMethodIndexToRun
    3. Case 0 : E_Kessel1.Image = Ausspielungsbilder(rnd.Next(0, Ausspielungsbilder.Length))
    4. Case 1 : E_Kessel2.Image = Ausspielungsbilder(rnd.Next(0, Ausspielungsbilder.Length))
    5. Case 2 : E_Kessel3.Image = Ausspielungsbilder(rnd.Next(0, Ausspielungsbilder.Length))
    6. Case 3 : E_Kessel4.Image = Ausspielungsbilder(rnd.Next(0, Ausspielungsbilder.Length))
    7. Case 4 : E_Kessel5.Image = Ausspielungsbilder(rnd.Next(0, Ausspielungsbilder.Length))
    8. Case 5 : E_Kessel6.Image = Ausspielungsbilder(rnd.Next(0, Ausspielungsbilder.Length))
    9. Case 6 : E_Kessel7.Image = Ausspielungsbilder(rnd.Next(0, Ausspielungsbilder.Length))
    10. Case 7 : E_Kessel8.Image = Ausspielungsbilder(rnd.Next(0, Ausspielungsbilder.Length))
    11. Case 8 : E_Kessel9.Image = Ausspielungsbilder(rnd.Next(0, Ausspielungsbilder.Length))
    12. End Select
    13. CurrentMethodIndexToRun = (CurrentMethodIndexToRun + 1) Mod 9


    Woher weis ich denn nun welches Bild wo ist, das ich mit die Anzahl der Kirschen beispielsweise in einem Label anzeigen kann?

    Otti schrieb:

    Woher weis ich denn nun welches Bild wo ist, das ich mit die Anzahl der Kirschen beispielsweise in einem Label anzeigen kann?
    Hole Dir den Index in eine Variable und verwende sie:

    VB.NET-Quellcode

    1. Dim nummer = rnd.Next(0, Ausspielungsbilder.Length)
    2. Select Case CurrentMethodIndexToRun
    3. Case 0 : E_Kessel1.Image = Ausspielungsbilder(nummer)
    4. Case 1 : E_Kessel2.Image = Ausspielungsbilder(nummer)
    5. Case 2 : E_Kessel3.Image = Ausspielungsbilder(nummer)
    6. Case 3 : E_Kessel4.Image = Ausspielungsbilder(nummer)
    7. Case 4 : E_Kessel5.Image = Ausspielungsbilder(nummer)
    8. Case 5 : E_Kessel6.Image = Ausspielungsbilder(nummer)
    9. Case 6 : E_Kessel7.Image = Ausspielungsbilder(nummer)
    10. Case 7 : E_Kessel8.Image = Ausspielungsbilder(nummer)
    11. Case 8 : E_Kessel9.Image = Ausspielungsbilder(nummer)
    12. End Select
    13. 'nummer verwenden
    14. CurrentMethodIndexToRun = (CurrentMethodIndexToRun + 1) Mod 9
    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!