GDI+ - Fehler waehrend der Laufzeit

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

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    GDI+ - Fehler waehrend der Laufzeit

    Hallo und guten Tag,

    ich hoffe, ich habe das Thema in der richtigen Kategorie erstellt. Erst vor ein paar Wochen habe ich mit Visual Basic begonnen, eigentlich komme ich aus der "Swift-Welt".

    Ich habe folgendes Problem:

    Erstellt wurde von mir ein kleines Programm zu Testzwecken, um die Sprache besser kennenzulernen.

    Zur Laufzeit des Programmes werden folgende Elemente nicht mehr angezeigt:
    • linienstil
    • fuellstil
    • sowie die linien- und Fuellfarbe
    Ich vermute es hat etwas mit dem Schreibschutz der entsprechenden Felder zu tun, doch auch der Test mit einer "ReadOnly" Anweisung war nicht zielführend.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System
    2. Imports System.Drawing
    3. Imports System.Windows.Forms
    4. Public Class frmSpielerei
    5. Private zeichenflaeche As Graphics
    6. Private linienfarbe As Color
    7. Private hintergrundfarbe As Color
    8. Private bereich As Rectangle
    9. Private bereichReferenz As Rectangle
    10. Private linienstil As Drawing2D.DashStyle() = {
    11. Drawing2D.DashStyle.Dash,
    12. Drawing2D.DashStyle.DashDot,
    13. Drawing2D.DashStyle.DashDotDot,
    14. Drawing2D.DashStyle.Dot,
    15. Drawing2D.DashStyle.Solid}
    16. Private fuellstil As Drawing2D.HatchStyle() = {
    17. Drawing2D.HatchStyle.BackwardDiagonal,
    18. Drawing2D.HatchStyle.Cross,
    19. Drawing2D.HatchStyle.DottedGrid,
    20. Drawing2D.HatchStyle.ForwardDiagonal,
    21. Drawing2D.HatchStyle.Sphere,
    22. Drawing2D.HatchStyle.Vertical,
    23. Drawing2D.HatchStyle.Wave,
    24. Drawing2D.HatchStyle.ZigZag}
    25. Private Sub frmSpielerei_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    26. 'Linienfarbe schwarz setzen
    27. linienfarbe = Color.Black
    28. hintergrundfarbe = Color.Black
    29. For Each element As Drawing2D.DashStyle In linienstil
    30. listBoxLinieStil.Items.Add("")
    31. Next
    32. For Each element As Drawing2D.HatchStyle In fuellstil
    33. listBoxHintergrundMuster.Items.Add("")
    34. Next
    35. 'Referenz auf die Zeichenfläche des Panels setzen
    36. zeichenflaeche = Panel1.CreateGraphics()
    37. End Sub
    38. Private Sub buttonStart_Click(ByVal sender As Object, ByVal e As EventArgs)
    39. Dim groesse As Integer = 0
    40. Dim stift As Pen = New Pen(linienfarbe)
    41. Dim pinsel As SolidBrush = New SolidBrush(hintergrundfarbe)
    42. stift.Width = Convert.ToInt32(numericUpDownLinieStaerke.Value)
    43. bereich = Panel1.ClientRectangle
    44. bereichReferenz = Panel1.ClientRectangle
    45. Dim wiederholung As Integer = Convert.ToInt32(NumericUpDownWdhlg.Value)
    46. Dim geschwindigkeit As Integer = Convert.ToInt32(NumericUpDownGeschw.Value) * 10
    47. Select Case trackBar1.Value
    48. Case 1
    49. groesse = 125
    50. Case 2
    51. groesse = 100
    52. Case 3
    53. groesse = 75
    54. End Select
    55. If listBoxLinieStil.SelectedIndex >= 0 Then stift.DashStyle = linienstil(listBoxLinieStil.SelectedIndex)
    56. If radioButtonKreis.Checked = True Then
    57. If radioButtonHintergrundOhne.Checked = True Then
    58. bereich.Width = Panel1.ClientRectangle.Width - (groesse * 2)
    59. bereich.Height = Panel1.ClientRectangle.Height - (groesse * 2)
    60. bereich.Location = New Point(Panel1.ClientRectangle.Left + groesse, Panel1.ClientRectangle.Top + groesse)
    61. If NumericUpDownWdhlg.Value >= 1 AndAlso NumericUpDownGeschw.Value >= 1 Then
    62. For durchlauf As Integer = 0 To CInt(NumericUpDownWdhlg.Value - 1)
    63. While bereich.Width < bereichReferenz.Width
    64. bereich.Width = bereich.Width + 10
    65. bereich.Height = bereich.Height + 10
    66. bereich.Location = New Point(bereich.Left - 5, bereich.Top - 5)
    67. zeichenflaeche.DrawEllipse(stift, bereich)
    68. System.Threading.Thread.Sleep(geschwindigkeit)
    69. zeichenflaeche.Clear(Panel1.BackColor)
    70. End While
    71. While bereich.Width > groesse
    72. bereich.Width = bereich.Width - 10
    73. bereich.Height = bereich.Height - 10
    74. bereich.Location = New Point(bereich.Left + 5, bereich.Top + 5)
    75. zeichenflaeche.DrawEllipse(stift, bereich)
    76. System.Threading.Thread.Sleep(geschwindigkeit)
    77. zeichenflaeche.Clear(Panel1.BackColor)
    78. End While
    79. Next
    80. ElseIf NumericUpDownWdhlg.Value >= 1 AndAlso numericUpDownGeschw.Value = 0 Then
    81. MessageBox.Show("Bitte legen Sie die Geschwindigkeit fest.")
    82. ElseIf NumericUpDownWdhlg.Value = 0 AndAlso numericUpDownGeschw.Value >= 1 Then
    83. MessageBox.Show("Bitte legen Sie die Wiederhohlungen fest")
    84. Else
    85. zeichenflaeche.DrawEllipse(stift, bereich)
    86. End If
    87. End If
    88. If radioButtonHintergrundFarbe.Checked = True Then zeichenflaeche.FillEllipse(pinsel, Panel1.ClientRectangle.Left + groesse, Panel1.ClientRectangle.Top + groesse, Panel1.ClientRectangle.Width - (groesse * 2), Panel1.ClientRectangle.Height - (groesse * 2))
    89. If radioButtonHintergrundMuster.Checked = True AndAlso listBoxHintergrundMuster.SelectedIndex >= 0 Then
    90. Dim musterPinsel As System.Drawing.Drawing2D.HatchBrush = New System.Drawing.Drawing2D.HatchBrush(fuellstil(listBoxHintergrundMuster.SelectedIndex), stift.Color, Color.White)
    91. zeichenflaeche.FillEllipse(musterPinsel, Panel1.ClientRectangle.Left + groesse, Panel1.ClientRectangle.Top + groesse, Panel1.ClientRectangle.Width - (groesse * 2), Panel1.ClientRectangle.Height - (groesse * 2))
    92. End If
    93. End If
    94. If radioButtonRechteck.Checked = True Then
    95. If radioButtonHintergrundOhne.Checked = True Then
    96. If NumericUpDownWdhlg.Value >= 1 AndAlso numericUpDownGeschw.Value >= 1 Then
    97. bereich.Width = Panel1.ClientRectangle.Width - (groesse * 2)
    98. bereich.Height = Panel1.ClientRectangle.Height - (groesse * 2)
    99. bereich.Location = New Point(Panel1.ClientRectangle.Left + groesse, Panel1.ClientRectangle.Top + groesse)
    100. For durchlauf As Integer = 0 To CInt(NumericUpDownWdhlg.Value - 1)
    101. While bereich.Width < bereichReferenz.Width
    102. bereich.Width = bereich.Width + 10
    103. bereich.Height = bereich.Height + 10
    104. bereich.Location = New Point(bereich.Left - 5, bereich.Top - 5)
    105. zeichenflaeche.DrawRectangle(stift, bereich)
    106. System.Threading.Thread.Sleep(geschwindigkeit)
    107. zeichenflaeche.Clear(Panel1.BackColor)
    108. End While
    109. While bereich.Width > groesse
    110. bereich.Width = bereich.Width - 10
    111. bereich.Height = bereich.Height - 10
    112. bereich.Location = New Point(bereich.Left + 5, bereich.Top + 5)
    113. zeichenflaeche.DrawRectangle(stift, bereich)
    114. System.Threading.Thread.Sleep(geschwindigkeit)
    115. zeichenflaeche.Clear(Panel1.BackColor)
    116. End While
    117. Next
    118. ElseIf NumericUpDownWdhlg.Value >= 1 AndAlso numericUpDownGeschw.Value = 0 Then
    119. MessageBox.Show("Bitte legen Sie die Geschwindigkeit fest.")
    120. ElseIf NumericUpDownWdhlg.Value = 0 AndAlso numericUpDownGeschw.Value >= 1 Then
    121. MessageBox.Show("Bitte legen Sie die Wiederhohlungen fest")
    122. Else
    123. zeichenflaeche.DrawRectangle(stift, Panel1.ClientRectangle.Left + groesse, Panel1.ClientRectangle.Top + groesse, Panel1.ClientRectangle.Width - (groesse * 2), Panel1.ClientRectangle.Height - (groesse * 2))
    124. End If
    125. End If
    126. If radioButtonHintergrundFarbe.Checked = True Then zeichenflaeche.FillRectangle(pinsel, Panel1.ClientRectangle.Left + groesse, Panel1.ClientRectangle.Top + groesse, Panel1.ClientRectangle.Width - (groesse * 2), Panel1.ClientRectangle.Height - (groesse * 2))
    127. If radioButtonHintergrundMuster.Checked = True AndAlso listBoxHintergrundMuster.SelectedIndex >= 0 Then
    128. Dim musterPinsel As System.Drawing.Drawing2D.HatchBrush = New System.Drawing.Drawing2D.HatchBrush(fuellstil(listBoxHintergrundMuster.SelectedIndex), stift.Color, Color.White)
    129. zeichenflaeche.FillRectangle(musterPinsel, Panel1.ClientRectangle.Left + groesse, Panel1.ClientRectangle.Top + groesse, Panel1.ClientRectangle.Width - (groesse * 2), Panel1.ClientRectangle.Height - (groesse * 2))
    130. End If
    131. End If
    132. If radioButtonLinie.Checked = True Then
    133. bereich = bereichReferenz
    134. Dim xMax As Integer = bereich.Width - groesse
    135. Dim xPos As Integer = bereich.Left + groesse
    136. Dim yPos As Integer = CInt(bereich.Height / 2)
    137. Dim yMax As Integer = CInt(bereich.Height / 2)
    138. Dim uPos As Integer = CInt(bereich.Height / 2)
    139. Dim uMax As Integer = CInt(bereich.Height / 2)
    140. Dim mitte As Integer = CInt(bereich.Height / 2)
    141. Dim bottom As Integer = bereich.Bottom
    142. Dim top As Integer = bereich.Top + 1
    143. If NumericUpDownWdhlg.Value >= 1 AndAlso numericUpDownGeschw.Value >= 1 Then
    144. For durchlauf As Integer = 0 To CInt(NumericUpDownWdhlg.Value - 1)
    145. While yPos > top AndAlso uPos < bottom
    146. yPos = yPos - 5
    147. yMax = yMax - 5
    148. zeichenflaeche.DrawLine(stift, xPos, yPos, xMax, yMax)
    149. uPos = uPos + 5
    150. uMax = uMax + 5
    151. zeichenflaeche.DrawLine(stift, xPos, uPos, xMax, uMax)
    152. System.Threading.Thread.Sleep(geschwindigkeit)
    153. zeichenflaeche.Clear(Panel1.BackColor)
    154. End While
    155. While yPos < mitte AndAlso uPos > mitte
    156. yPos = yPos + 5
    157. yMax = yMax + 5
    158. zeichenflaeche.DrawLine(stift, xPos, yPos, xMax, yMax)
    159. uPos = uPos - 5
    160. uMax = uMax - 5
    161. zeichenflaeche.DrawLine(stift, xPos, uPos, xMax, uMax)
    162. System.Threading.Thread.Sleep(geschwindigkeit)
    163. zeichenflaeche.Clear(Panel1.BackColor)
    164. End While
    165. Next
    166. ElseIf NumericUpDownWdhlg.Value >= 1 AndAlso numericUpDownGeschw.Value = 0 Then
    167. MessageBox.Show("Bitte legen Sie die Geschwindigkeit fest")
    168. ElseIf NumericUpDownWdhlg.Value = 0 AndAlso numericUpDownGeschw.Value >= 1 Then
    169. MessageBox.Show("Bitte legen Sie die Wiederhohlungen fest")
    170. Else
    171. zeichenflaeche.DrawLine(stift, xPos, yPos, xMax, yMax)
    172. End If
    173. End If
    174. End Sub
    175. Private Sub buttonLinienFarbe_Click(ByVal sender As Object, ByVal e As EventArgs)
    176. If ColorDialog1.ShowDialog() = DialogResult.OK Then
    177. panelLinienFarbeVorschau.BackColor = ColorDialog1.Color
    178. linienfarbe = ColorDialog1.Color
    179. End If
    180. End Sub
    181. Private Sub buttonHintergrundFarbe_Click(ByVal sender As Object, ByVal e As EventArgs)
    182. If ColorDialog1.ShowDialog() = DialogResult.OK Then
    183. panelHintergrundFarbeVorschau.BackColor = ColorDialog1.Color
    184. hintergrundfarbe = ColorDialog1.Color
    185. radioButtonHintergrundFarbe.Checked = True
    186. End If
    187. End Sub
    188. Private Sub listBoxLinieStil_DrawItem(ByVal sender As Object, ByVal e As DrawItemEventArgs)
    189. Dim y As Integer
    190. Dim boxStift As Pen = New Pen(Color.Black)
    191. y = CInt((e.Bounds.Top + e.Bounds.Bottom) / 2)
    192. e.DrawBackground()
    193. boxStift.DashStyle = linienstil(e.Index)
    194. e.Graphics.DrawLine(boxStift, e.Bounds.Left + 1, y, e.Bounds.Right - 1, y)
    195. End Sub
    196. Private Sub listBoxHintergrundMuster_DrawItem(ByVal sender As Object, ByVal e As DrawItemEventArgs)
    197. Dim boxPinsel As System.Drawing.Drawing2D.HatchBrush = New System.Drawing.Drawing2D.HatchBrush(fuellstil(e.Index), Color.Black, Color.White)
    198. e.DrawBackground()
    199. e.Graphics.FillRectangle(boxPinsel, e.Bounds.Left + 1, e.Bounds.Top + 1, e.Bounds.Width - 1, e.Bounds.Height - 1)
    200. End Sub
    201. End Class


    Danke für euere Hilfe.


    ##########

    hat sich erledigt

    Post wiederhergestellt ~VaporiZed

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Yobi2020“ ()

    @Yobi2020 Willkommen im Forum. :thumbup:
    Als erstes:
    Editiere Deinen Post, markiere den Code und drück auf den Spoiler-Button (das durchgestrichene Auge).
    Du hast da einen absolut hohlen Vogel gepostet.
    Das Key-Word Handles kommt nur bei Form_Load vor, nicht aber bei all Deinen Controls.
    Wenn wir das untersuchen sollen, haben wir keine Lust, Deinen Code dahingehend zu editieren.
    Mach das bitte gefälligst selbst und poste einen Code, der, wenn wir ihn per C&P in eine leere Form mit den richtigen Controls einfügen zumindest compiliert.
    Teste dies an einem neuen leeren Projekt.
    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!