Picturebox mehrere Kreise mit verschiedenen Eigenschaften zeichnen

  • VB.NET

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

    Picturebox mehrere Kreise mit verschiedenen Eigenschaften zeichnen

    Hallo liebes Forum,
    ich bin neu und da ich hier als Passivnutzer viele gute Tipps bekommen habe, hoffe ich bei meiner folgenden Frage Hilfe zu bekommen :)

    Es geht darum, dass ich ein kleines Spiel programmiere, bei dem man einen Tannenbaum schmücken kann.
    Es sollen Kugeln in verschiedenen Farben und Größen in eine Picturebox per Klick eingezeichnet werden können.

    Mein Problem ist, dass ich nicht weiß, wie ich jede Kugel einzeln mit seinen Eigenschaften einzeichnen kann.
    Bis jetzt ist es so, dass alle alten bereits gezeichneten Kugeln mit den neuen Eigenschaften überschrieben werden
    und ich dann lauter gleichaussehende Kugeln habe ...
    Wie kann ich das Problem lösen?
    Vielen Dank schonmal :)

    Dazu der folgende Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim punkte As New List(Of Point)
    3. Dim r As Integer = 10
    4. Dim r2 As Integer = 20
    5. Dim r3 As Integer = 30
    6. Dim rot As Boolean = False
    7. Dim grün As Boolean = False
    8. Dim blau As Boolean = False
    9. Dim lila As Boolean = False
    10. Dim gelb As Boolean = False
    11. Dim orange As Boolean = False
    12. Dim klein As Boolean = False
    13. Dim mittel As Boolean = False
    14. Dim gross As Boolean = False
    15. Protected x As Integer
    16. Protected y As Integer
    17. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    18. End Sub
    19. Private Sub PictureBox2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox2.Click
    20. rot = True
    21. grün = False
    22. blau = False
    23. lila = False
    24. gelb = False
    25. orange = False
    26. End Sub
    27. Private Sub PictureBox3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox3.Click
    28. rot = False
    29. grün = True
    30. blau = False
    31. lila = False
    32. gelb = False
    33. orange = False
    34. End Sub
    35. Private Sub PictureBox4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox4.Click
    36. rot = False
    37. grün = False
    38. blau = True
    39. lila = False
    40. gelb = False
    41. orange = False
    42. End Sub
    43. Private Sub PictureBox5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox5.Click
    44. rot = False
    45. grün = False
    46. blau = False
    47. lila = True
    48. gelb = False
    49. orange = False
    50. End Sub
    51. Private Sub PictureBox6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox6.Click
    52. rot = False
    53. grün = False
    54. blau = False
    55. lila = False
    56. gelb = True
    57. orange = False
    58. End Sub
    59. Private Sub PictureBox7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox7.Click
    60. rot = False
    61. grün = False
    62. blau = False
    63. lila = False
    64. gelb = False
    65. orange = True
    66. End Sub
    67. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    68. klein = True
    69. mittel = False
    70. gross = False
    71. End Sub
    72. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    73. klein = False
    74. mittel = True
    75. gross = False
    76. End Sub
    77. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    78. klein = False
    79. mittel = False
    80. gross = True
    81. End Sub
    82. Private Sub PictureBox1_MouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseClick
    83. 'click liefert die koordinaten nicht mit, mausclick schon - in e stecken koord des mausklicks
    84. x = e.X
    85. y = e.Y
    86. punkte.Add(New Point(x, y))
    87. PictureBox1.Invalidate()
    88. End Sub
    89. Private Sub PictureBox1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
    90. Dim g As Graphics = e.Graphics
    91. Debug.Assert(g IsNot Nothing)
    92. For Each i As Point In punkte
    93. If rot And klein Then
    94. g.DrawEllipse(Pens.Red, i.X, i.Y, 2 * r, 2 * r)
    95. g.FillEllipse(Brushes.Red, i.X, i.Y, 2 * r, 2 * r)
    96. End If
    97. If rot And mittel Then
    98. g.DrawEllipse(Pens.Red, i.X, i.Y, 2 * r2, 2 * r2)
    99. g.FillEllipse(Brushes.Red, i.X, i.Y, 2 * r2, 2 * r2)
    100. End If
    101. If rot And gross Then
    102. g.DrawEllipse(Pens.Red, i.X, i.Y, 2 * r3, 2 * r3)
    103. g.FillEllipse(Brushes.Red, i.X, i.Y, 2 * r3, 2 * r3)
    104. End If
    105. If grün And klein Then
    106. g.DrawEllipse(Pens.Green, i.X, i.Y, 2 * r, 2 * r)
    107. g.FillEllipse(Brushes.Green, i.X, i.Y, 2 * r, 2 * r)
    108. End If
    109. If grün And mittel Then
    110. g.DrawEllipse(Pens.Green, i.X, i.Y, 2 * r2, 2 * r2)
    111. g.FillEllipse(Brushes.Green, i.X, i.Y, 2 * r2, 2 * r2)
    112. End If
    113. If grün And gross Then
    114. g.DrawEllipse(Pens.Green, i.X, i.Y, 2 * r3, 2 * r3)
    115. g.FillEllipse(Brushes.Green, i.X, i.Y, 2 * r3, 2 * r3)
    116. End If
    117. If blau And klein Then
    118. g.DrawEllipse(Pens.Blue, i.X, i.Y, 2 * r, 2 * r)
    119. g.FillEllipse(Brushes.Blue, i.X, i.Y, 2 * r, 2 * r)
    120. End If
    121. If blau And mittel Then
    122. g.DrawEllipse(Pens.Blue, i.X, i.Y, 2 * r2, 2 * r2)
    123. g.FillEllipse(Brushes.Blue, i.X, i.Y, 2 * r2, 2 * r2)
    124. End If
    125. If blau And gross Then
    126. g.DrawEllipse(Pens.Blue, i.X, i.Y, 2 * r3, 2 * r3)
    127. g.FillEllipse(Brushes.Blue, i.X, i.Y, 2 * r3, 2 * r3)
    128. End If
    129. If lila And klein Then
    130. g.DrawEllipse(Pens.Violet, i.X, i.Y, 2 * r, 2 * r)
    131. g.FillEllipse(Brushes.Violet, i.X, i.Y, 2 * r, 2 * r)
    132. End If
    133. If lila And mittel Then
    134. g.DrawEllipse(Pens.Violet, i.X, i.Y, 2 * r2, 2 * r2)
    135. g.FillEllipse(Brushes.Violet, i.X, i.Y, 2 * r2, 2 * r2)
    136. End If
    137. If lila And gross Then
    138. g.DrawEllipse(Pens.Violet, i.X, i.Y, 2 * r3, 2 * r3)
    139. g.FillEllipse(Brushes.Violet, i.X, i.Y, 2 * r3, 2 * r3)
    140. End If
    141. If gelb And klein Then
    142. g.DrawEllipse(Pens.Yellow, x, x, 2 * r, 2 * r)
    143. g.FillEllipse(Brushes.Yellow, x, x, 2 * r, 2 * r)
    144. End If
    145. If gelb And mittel Then
    146. g.DrawEllipse(Pens.Yellow, i.X, i.Y, 2 * r2, 2 * r2)
    147. g.FillEllipse(Brushes.Yellow, i.X, i.Y, 2 * r2, 2 * r2)
    148. End If
    149. If gelb And gross Then
    150. g.DrawEllipse(Pens.Yellow, i.X, i.Y, 2 * r3, 2 * r3)
    151. g.FillEllipse(Brushes.Yellow, i.X, i.Y, 2 * r3, 2 * r3)
    152. End If
    153. If orange And klein Then
    154. g.DrawEllipse(Pens.Orange, x, x, 2 * r, 2 * r)
    155. g.FillEllipse(Brushes.Orange, x, x, 2 * r, 2 * r)
    156. End If
    157. If orange And mittel Then
    158. g.DrawEllipse(Pens.Orange, i.X, i.Y, 2 * r2, 2 * r2)
    159. g.FillEllipse(Brushes.Orange, i.X, i.Y, 2 * r2, 2 * r2)
    160. End If
    161. If orange And gross Then
    162. g.DrawEllipse(Pens.Orange, i.X, i.Y, 2 * r3, 2 * r3)
    163. g.FillEllipse(Brushes.Orange, i.X, i.Y, 2 * r3, 2 * r3)
    164. End If
    165. Next i
    166. End Sub
    167. '**********************************************************
    168. '********************** Menü-Befehle **********************
    169. '**********************************************************
    170. Private Sub Baum1ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Baum1ToolStripMenuItem.Click
    171. PictureBox1.Image = My.Resources.baum1
    172. End Sub
    173. Private Sub Baum2ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Baum2ToolStripMenuItem.Click
    174. PictureBox1.Image = My.Resources.baum2
    175. End Sub
    176. Private Sub NeuesSpielToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NeuesSpielToolStripMenuItem.Click
    177. Form1_Load(sender, e)
    178. Refresh()
    179. PictureBox1.Invalidate()
    180. End Sub
    181. End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „vacuphase“ ()

    Willkommen im Forum. :thumbup:
    Editiere bitte Deinen Post oben und mach einen Expander [+] um den Code.
    Mach Dir eine Klasse, wo Du für jede Kugel eine Instanz mit New erstellst

    VB.NET-Quellcode

    1. Public Class Weihnachtsbaumkugel
    2. Public x As Integer
    3. Public y As Integer
    4. Public col As Color
    5. ' ...
    6. End Class
    Diese Instanz hängst Du dann mit Add() an eine Dim MyListOfKugeln = New List(Of Weihnachtsbaumkugel) und im Paint gehst Du die Liste durch und malst alle.
    For Each Kugel in MyListOfKugeln
    ' malen
    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!
    Vielen Dank für die schnelle Antwort :)
    Ich habe nun eine Klasse erstellt und versucht zu verstehen, was Du meinst.
    Mein Problem ist, dass ich nicht weiß, was genau in die neu angelegte Klasse geschrieben werden soll.

    x, y und col sind statische Werte aber die müssen doch dynamisch reingeschrieben werden können?

    Und wie stelle ich es an, dass der Farbwert und Radius aus meinen If-Blöcken
    in die neue Instanz geschrieben wird?

    Ist das mit dem malen der Kugelliste so OK?

    VB.NET-Quellcode

    1. For Each kugel In mylistofkugeln
    2. If rot And klein Then
    3. g.DrawEllipse(Pens.Red, kugel.X, kugel.Y, 2 * r, 2 * r)
    4. g.FillEllipse(Brushes.Red, kugel.X, kugel.Y, 2 * r, 2 * r)
    5. End If
    6. ' restliche If-Blöcke


    In jeder Instanz einer Kugel müsste dann ja für ihre Farbe und Größe ein True stehen,
    dass die Schleife das rausziehen kann, oder irre ich mich?

    Vielen Dank schonmal :)
    Statt punkte.Add(New Point(x, y)) machst Du
    punkte.Add(New Weihnachtsbaumkugel(x, y, r, col, WAS_AUCH_IMMER_DU_BRAUCHST)), natürlich muss statt Dim punkte As New List(Of Point) ein
    Dim punkte As New List(Of Weihnachtsbaumkugel) da stehen.
    Wenn Du ganz gescheit bist, bekommt Weihnachtsbaumkugel eine Paint-Prozedur, die dann im PictureBox1_Paint aufgerufen wird.
    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!
    Danke erstmal für Deine super Hilfe.
    Ich habe jetzt das Programm umgeformt, es geht zwar noch nicht
    aber ich denke, es hängt nur an einer Kleinigkeit :)

    Meine Klasse hat nun folgenden Inhalt:

    VB.NET-Quellcode

    1. Public Class weihnachtsbaumkugel
    2. Public x As Integer
    3. Public y As Integer
    4. Public radius As Integer
    5. Public farbe As Pen
    6. End Class


    Im Mausclick-Event der Picturebox steht folgendes:

    VB.NET-Quellcode

    1. x = e.X
    2. y = e.Y
    3. If rot And klein Then
    4. kugelliste.Add(New weihnachtsbaumkugel(x, y, 10, Pens.Red))
    5. End If
    6. 'restliche If-Blöcke


    Im Paint-Event steht das:

    VB.NET-Quellcode

    1. Dim g As Graphics = e.Graphics
    2. Debug.Assert(g IsNot Nothing)
    3. For Each weihnachtsbaumkugel In kugelliste
    4. g.DrawEllipse(farbe, x, y, radius, radius)
    5. Next


    Die Fehlerkonsole sagt mir nun, dass "Zu viele Argumente für Public Sub New()" vorliegen
    und macht Kringel unter die Zeilen "kugelliste.Add(New weihnachtsbaumkugel(x, y, 10, Pens.Red))".
    Ich hoffe es ist nur eine Kleinigkeit :)
    Danke schonmal, hast mir schon super geholfen :)
    Du musst der Klasse weihnachtsbaumkugel natürlich auch einen entsprechenden Konstruktor hinzufügen.
    Für dich wäre das z.B. so:

    VB.NET-Quellcode

    1. Sub New(Byval x As Integer,Byval y As Integer, Byval Radius as Integer, Byval drawPen As Pen)
    2. Me.x = x
    3. Me.y = y
    4. Me.radius = Radius
    5. Me.farbe = drawPen
    6. End Sub


    Diesen Code fügst du noch zu deiner Weihnachtsbaumkugel-Klasse hinzu.
    Danke, jetzt gibt es keine Fehler mehr aber wenn ich das Programm starte
    und dann eine Farbe und eine Größe auswähle und in die Picturebox klicke,
    dann erscheint ein rotes Kreuz auf weißem Hintergrund.
    Laut Eigenschaft der Picbox ist das ein Fehlerbild ...
    Woran liegt das wohl?
    Ich glaube wir sind ganz nah an der Lösung :)
    Hier der Code.

    Die Klasse weihnachtsbaumkugel
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class weihnachtsbaumkugel
    2. Public x As Integer
    3. Public y As Integer
    4. Public radius As Integer
    5. Public farbe As Pen
    6. Public füllfarbe As Brush
    7. Sub New(ByVal x As Integer, ByVal y As Integer, ByVal Radius As Integer, ByVal drawPen As Pen, ByVal drawbrush As Brush)
    8. Me.x = x
    9. Me.y = y
    10. Me.radius = Radius
    11. Me.farbe = drawPen
    12. Me.füllfarbe = drawbrush
    13. End Sub
    14. End Class


    Der Code in Form1:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim kugelliste As New List(Of weihnachtsbaumkugel)
    3. Dim r As Integer = 10
    4. Dim r2 As Integer = 20
    5. Dim r3 As Integer = 30
    6. Dim rot As Boolean = False
    7. Dim grün As Boolean = False
    8. Dim blau As Boolean = False
    9. Dim lila As Boolean = False
    10. Dim gelb As Boolean = False
    11. Dim orange As Boolean = False
    12. Dim klein As Boolean = False
    13. Dim mittel As Boolean = False
    14. Dim gross As Boolean = False
    15. Public x As Integer
    16. Public y As Integer
    17. Public radius As Integer
    18. Public farbe As Pen
    19. Public füllfarbe As Brush
    20. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    21. End Sub
    22. Private Sub PictureBox2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox2.Click
    23. rot = True
    24. grün = False
    25. blau = False
    26. lila = False
    27. gelb = False
    28. orange = False
    29. End Sub
    30. Private Sub PictureBox3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox3.Click
    31. rot = False
    32. grün = True
    33. blau = False
    34. lila = False
    35. gelb = False
    36. orange = False
    37. End Sub
    38. Private Sub PictureBox4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox4.Click
    39. rot = False
    40. grün = False
    41. blau = True
    42. lila = False
    43. gelb = False
    44. orange = False
    45. End Sub
    46. Private Sub PictureBox5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox5.Click
    47. rot = False
    48. grün = False
    49. blau = False
    50. lila = True
    51. gelb = False
    52. orange = False
    53. End Sub
    54. Private Sub PictureBox6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox6.Click
    55. rot = False
    56. grün = False
    57. blau = False
    58. lila = False
    59. gelb = True
    60. orange = False
    61. End Sub
    62. Private Sub PictureBox7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox7.Click
    63. rot = False
    64. grün = False
    65. blau = False
    66. lila = False
    67. gelb = False
    68. orange = True
    69. End Sub
    70. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    71. klein = True
    72. mittel = False
    73. gross = False
    74. End Sub
    75. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    76. klein = False
    77. mittel = True
    78. gross = False
    79. End Sub
    80. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    81. klein = False
    82. mittel = False
    83. gross = True
    84. End Sub
    85. Private Sub PictureBox1_MouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseClick
    86. 'click liefert die koordinaten nicht mit, mausclick schon - in e stecken koord des mausklicks
    87. x = e.X
    88. y = e.Y
    89. If rot And klein Then
    90. kugelliste.Add(New weihnachtsbaumkugel(x, y, 10, Pens.Red, Brushes.Red))
    91. End If
    92. If rot And mittel Then
    93. kugelliste.Add(New weihnachtsbaumkugel(x, y, 20, Pens.Red, Brushes.Red))
    94. End If
    95. If rot And gross Then
    96. kugelliste.Add(New weihnachtsbaumkugel(x, y, 30, Pens.Red, Brushes.Red))
    97. End If
    98. If grün And klein Then
    99. kugelliste.Add(New weihnachtsbaumkugel(x, y, 10, Pens.Green, Brushes.Green))
    100. End If
    101. If grün And mittel Then
    102. kugelliste.Add(New weihnachtsbaumkugel(x, y, 20, Pens.Green, Brushes.Green))
    103. End If
    104. If grün And gross Then
    105. kugelliste.Add(New weihnachtsbaumkugel(x, y, 30, Pens.Green, Brushes.Green))
    106. End If
    107. If blau And klein Then
    108. kugelliste.Add(New weihnachtsbaumkugel(x, y, 10, Pens.Blue, Brushes.Blue))
    109. End If
    110. If blau And mittel Then
    111. kugelliste.Add(New weihnachtsbaumkugel(x, y, 20, Pens.Blue, Brushes.Blue))
    112. End If
    113. If blau And gross Then
    114. kugelliste.Add(New weihnachtsbaumkugel(x, y, 30, Pens.Blue, Brushes.Blue))
    115. End If
    116. If lila And klein Then
    117. kugelliste.Add(New weihnachtsbaumkugel(x, y, 10, Pens.Purple, Brushes.Purple))
    118. End If
    119. If lila And mittel Then
    120. kugelliste.Add(New weihnachtsbaumkugel(x, y, 20, Pens.Purple, Brushes.Purple))
    121. End If
    122. If lila And gross Then
    123. kugelliste.Add(New weihnachtsbaumkugel(x, y, 30, Pens.Purple, Brushes.Purple))
    124. End If
    125. If gelb And klein Then
    126. kugelliste.Add(New weihnachtsbaumkugel(x, y, 10, Pens.Yellow, Brushes.Yellow))
    127. End If
    128. If gelb And mittel Then
    129. kugelliste.Add(New weihnachtsbaumkugel(x, y, 20, Pens.Yellow, Brushes.Yellow))
    130. End If
    131. If gelb And gross Then
    132. kugelliste.Add(New weihnachtsbaumkugel(x, y, 30, Pens.Yellow, Brushes.Yellow))
    133. End If
    134. If orange And klein Then
    135. kugelliste.Add(New weihnachtsbaumkugel(x, y, 10, Pens.Orange, Brushes.Orange))
    136. End If
    137. If orange And mittel Then
    138. kugelliste.Add(New weihnachtsbaumkugel(x, y, 20, Pens.Orange, Brushes.Orange))
    139. End If
    140. If orange And gross Then
    141. kugelliste.Add(New weihnachtsbaumkugel(x, y, 30, Pens.Orange, Brushes.Orange))
    142. End If
    143. PictureBox1.Invalidate()
    144. End Sub
    145. Private Sub PictureBox1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
    146. Dim g As Graphics = e.Graphics
    147. Debug.Assert(g IsNot Nothing)
    148. For Each weihnachtsbaumkugel In kugelliste
    149. g.DrawEllipse(farbe, x, y, radius, radius)
    150. g.FillEllipse(füllfarbe, x, y, radius, radius)
    151. Next
    152. 'For Each weihnachtsbaumkugel In kugelliste
    153. ' If rot And klein Then
    154. ' g.DrawEllipse(Pens.Red, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r, 2 * r)
    155. ' g.FillEllipse(Brushes.Red, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r, 2 * r)
    156. ' End If
    157. ' If rot And mittel Then
    158. ' g.DrawEllipse(Pens.Red, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r2, 2 * r2)
    159. ' g.FillEllipse(Brushes.Red, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r2, 2 * r2)
    160. ' End If
    161. ' If rot And gross Then
    162. ' g.DrawEllipse(Pens.Red, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r3, 2 * r3)
    163. ' g.FillEllipse(Brushes.Red, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r3, 2 * r3)
    164. ' End If
    165. ' If grün And klein Then
    166. ' g.DrawEllipse(Pens.Green, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r, 2 * r)
    167. ' g.FillEllipse(Brushes.Green, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r, 2 * r)
    168. ' End If
    169. ' If grün And mittel Then
    170. ' g.DrawEllipse(Pens.Green, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r2, 2 * r2)
    171. ' g.FillEllipse(Brushes.Green, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r2, 2 * r2)
    172. ' End If
    173. ' If grün And gross Then
    174. ' g.DrawEllipse(Pens.Green, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r3, 2 * r3)
    175. ' g.FillEllipse(Brushes.Green, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r3, 2 * r3)
    176. ' End If
    177. ' If blau And klein Then
    178. ' g.DrawEllipse(Pens.Blue, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r, 2 * r)
    179. ' g.FillEllipse(Brushes.Blue, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r, 2 * r)
    180. ' End If
    181. ' If blau And mittel Then
    182. ' g.DrawEllipse(Pens.Blue, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r2, 2 * r2)
    183. ' g.FillEllipse(Brushes.Blue, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r2, 2 * r2)
    184. ' End If
    185. ' If blau And gross Then
    186. ' g.DrawEllipse(Pens.Blue, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r3, 2 * r3)
    187. ' g.FillEllipse(Brushes.Blue, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r3, 2 * r3)
    188. ' End If
    189. ' If lila And klein Then
    190. ' g.DrawEllipse(Pens.Violet, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r, 2 * r)
    191. ' g.FillEllipse(Brushes.Violet, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r, 2 * r)
    192. ' End If
    193. ' If lila And mittel Then
    194. ' g.DrawEllipse(Pens.Violet, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r2, 2 * r2)
    195. ' g.FillEllipse(Brushes.Violet, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r2, 2 * r2)
    196. ' End If
    197. ' If lila And gross Then
    198. ' g.DrawEllipse(Pens.Violet, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r3, 2 * r3)
    199. ' g.FillEllipse(Brushes.Violet, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r3, 2 * r3)
    200. ' End If
    201. ' If gelb And klein Then
    202. ' g.DrawEllipse(Pens.Yellow, x, x, 2 * r, 2 * r)
    203. ' g.FillEllipse(Brushes.Yellow, x, x, 2 * r, 2 * r)
    204. ' End If
    205. ' If gelb And mittel Then
    206. ' g.DrawEllipse(Pens.Yellow, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r2, 2 * r2)
    207. ' g.FillEllipse(Brushes.Yellow, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r2, 2 * r2)
    208. ' End If
    209. ' If gelb And gross Then
    210. ' g.DrawEllipse(Pens.Yellow, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r3, 2 * r3)
    211. ' g.FillEllipse(Brushes.Yellow, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r3, 2 * r3)
    212. ' End If
    213. ' If orange And klein Then
    214. ' g.DrawEllipse(Pens.Orange, x, x, 2 * r, 2 * r)
    215. ' g.FillEllipse(Brushes.Orange, x, x, 2 * r, 2 * r)
    216. ' End If
    217. ' If orange And mittel Then
    218. ' g.DrawEllipse(Pens.Orange, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r2, 2 * r2)
    219. ' g.FillEllipse(Brushes.Orange, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r2, 2 * r2)
    220. ' End If
    221. ' If orange And gross Then
    222. ' g.DrawEllipse(Pens.Orange, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r3, 2 * r3)
    223. ' g.FillEllipse(Brushes.Orange, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, 2 * r3, 2 * r3)
    224. ' End If
    225. 'Next
    226. End Sub
    227. '**********************************************************
    228. '********************** Menü-Befehle **********************
    229. '**********************************************************
    230. Private Sub Baum1ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Baum1ToolStripMenuItem.Click
    231. PictureBox1.Image = My.Resources.baum1
    232. End Sub
    233. Private Sub Baum2ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Baum2ToolStripMenuItem.Click
    234. PictureBox1.Image = My.Resources.baum2
    235. End Sub
    236. Private Sub NeuesSpielToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NeuesSpielToolStripMenuItem.Click
    237. Form1_Load(sender, e)
    238. Refresh()
    239. PictureBox1.Invalidate()
    240. End Sub
    241. End Class



    Hoffentlich findet sich der Fehler schnell :)
    Ist klar, da du ja nicht die Eigenschaften der Weihnachtskugel nimmst, sndern irgendwelche anderen

    VB.NET-Quellcode

    1. For Each kugel As weihnachtsbaumkugel In kugelliste
    2. g.FillEllipse(new SolidBrush(kugel.fuellfarbe), kugel.x, kugel.y, kugel.radius, kugel.radius)
    3. g.DrawEllipse(kugel.farbe, kugel.x, kugel.y, kugel.radius, kugel.radius)
    4. Next

    Du musst der Weihnachtsbaumkugelklasse noch eine Variable fuellfarbe hinzufügen, die den Typen Color hat. Im Konstruktor dementsprechend auch zuweisen.
    Mit den ganzen Booleans, das geht schöner mit Enums.
    DANKEEE, echt klasse :-)))

    Habe Deinen Rat nur halb befolgt aber es geht super :)

    Hier der abschließende Code:

    VB.NET-Quellcode

    1. Private Sub PictureBox1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
    2. Dim g As Graphics = e.Graphics
    3. Debug.Assert(g IsNot Nothing)
    4. For Each weihnachtsbaumkugel In kugelliste
    5. g.DrawEllipse(weihnachtsbaumkugel.farbe, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, weihnachtsbaumkugel.radius, weihnachtsbaumkugel.radius)
    6. g.FillEllipse(weihnachtsbaumkugel.füllfarbe, weihnachtsbaumkugel.x, weihnachtsbaumkugel.y, weihnachtsbaumkugel.radius, weihnachtsbaumkugel.radius)
    7. Next
    8. End Sub


    Vielen Dank Euch beiden, ich melde mich bestimmt wieder :)
    Wenn Du das Paint in die Weihnachts-Klasse auslagerst, ist es noch eine Spur eleganter.
    Und dann solltest Du den Mittelpunkt der Kugel an der MouseKlick-Position liegen lassen, da musst Du im Konstruktor jeweila den Radius von x und y abziehen.

    VB.NET-Quellcode

    1. Class Form1
    2. Private Sub PictureBox1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
    3. Dim g As Graphics = e.Graphics
    4. For Each weihnachtsbaumkugel In kugelliste
    5. weihnachtsbaumkugel.Paint(g)
    6. Next
    7. End Sub
    8. ' ...
    9. End Class

    VB.NET-Quellcode

    1. Class weihnachtsbaumkugel
    2. ' ...
    3. Public Sub Paint(g As Graphics)
    4. g.DrawEllipse(Me.farbe, Me.x, Me.y, Me.radius, Me.radius)
    5. g.FillEllipse(Me.füllfarbe, Me.x, Me.y, Me.radius, Me.radius)
    6. End Sub
    7. End Class
    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!