hi,
ich habe eine kleine Zeichenroutine geschrieben die in der Funktion onpaint liegt.
Protected Overrides Sub OnPaint(ByVal pe As System.Windows.Forms.PaintEventArgs)
nun möchte ich dieses auch manuell aufrufen können damit er alles neuzeichnet und zwar wann ich es will. habe es im moment so realisiert das er das fenster ganz klein macht und dann wieder groß, so das er dann aktualliesiert aber das ist ja keine elegante lösung ür das problem.
oder kann man auch ausserdem der onpaint routine auf dem formular rumalen?
ich hänge einfach mal den code der routine an, vll hat wer ne idee:
Public Class Formular
Dim rechteck As Rectangle
Dim brFeld As Integer
Dim hoFeld As Integer
Dim xFeld As Integer
Dim yfeld As Integer
Dim xlauf As Integer
Dim ylauf As Integer
Dim anzFaecher As Integer
Dim formbreit As Integer
Dim formhoch As Integer
Dim anzBreit As Integer
Dim anzHoch As Integer
Dim belegterplatz As Boolean
Dim gang As Integer
Dim formheih As Integer
Private Sub Formular_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
wertRuecksetz()
anzBreit = 22
anzHoch = 14
anzFaecher = anzBreit * anzHoch
formhoch = anzHoch * hoFeld
formbreit = anzBreit * brFeld
Me.Width = formbreit + anzBreit * 5
Me.Height = formhoch + anzHoch * 5 + 200
formheih = Me.Height
grAuswahl.Location = New Point(5, Me.Height - grAuswahl.Height - 50)
belegterplatz = False
gang = 1
End Sub
Private Sub pruefeFeld(ByVal x, ByVal y, ByVal gang)
If x = 5 And y = 2 And gang = 1 Or x = 10 And y = 10 And gang = 1 Or gang = 3 Then
belegterplatz = True
Else
belegterplatz = False
End If
End Sub
Protected Overrides Sub OnPaint(ByVal pe As System.Windows.Forms.PaintEventArgs)
Dim i As Integer
Dim rand As New Pen(Color.GreenYellow)
Dim feldfarbe As Brush
i = 0
'rand.Color = Color.GreenYellow
feldfarbe = Brushes.Green
While i < anzFaecher
rechteck = New Rectangle(xFeld, yfeld, brFeld, hoFeld)
Dim g As Graphics = pe.Graphics
pruefeFeld(xlauf, ylauf, gang)
If belegterplatz = True Then
rand = Pens.RosyBrown
feldfarbe = Brushes.Red
Else
rand = Pens.YellowGreen
feldfarbe = Brushes.Green
End If
g.DrawRectangle(rand, rechteck)
g.FillRectangle(feldfarbe, rechteck)
xFeld = xFeld + brFeld + 5
If xFeld > Me.Width Or xlauf >= 20 Then
yfeld = yfeld + hoFeld + 5
ylauf = ylauf + 1
xFeld = 10
xlauf = 0
If yfeld > Me.Height Or ylauf >= 14 Then
Exit While
End If
End If
i = i + 1
xlauf = xlauf + 1
End While
wertRuecksetz()
End Sub
Private Sub Formular_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
End Sub
Private Sub wertRuecksetz()
brFeld = 50
hoFeld = 25
xFeld = 10
yfeld = 40
xlauf = 1
ylauf = 0
End Sub
Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged
rbCheck()
End Sub
Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged
rbCheck()
End Sub
Private Sub rbCheck()
If RadioButton1.Checked = True Then
gang = 1
End If
If RadioButton2.Checked = True Then
gang = 2
End If
If RadioButton3.Checked = True Then
gang = 3
End If
Refreshfelder()
End Sub
Private Sub RadioButton3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton3.CheckedChanged
rbCheck()
End Sub
Private Sub cmdRefresh_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdRefresh.Click
Refreshfelder()
End Sub
Private Sub Refreshfelder()
Me.Height = 0
Me.Height = formheih
End Sub
End Class
ich habe eine kleine Zeichenroutine geschrieben die in der Funktion onpaint liegt.
Protected Overrides Sub OnPaint(ByVal pe As System.Windows.Forms.PaintEventArgs)
nun möchte ich dieses auch manuell aufrufen können damit er alles neuzeichnet und zwar wann ich es will. habe es im moment so realisiert das er das fenster ganz klein macht und dann wieder groß, so das er dann aktualliesiert aber das ist ja keine elegante lösung ür das problem.
oder kann man auch ausserdem der onpaint routine auf dem formular rumalen?
ich hänge einfach mal den code der routine an, vll hat wer ne idee:
Public Class Formular
Dim rechteck As Rectangle
Dim brFeld As Integer
Dim hoFeld As Integer
Dim xFeld As Integer
Dim yfeld As Integer
Dim xlauf As Integer
Dim ylauf As Integer
Dim anzFaecher As Integer
Dim formbreit As Integer
Dim formhoch As Integer
Dim anzBreit As Integer
Dim anzHoch As Integer
Dim belegterplatz As Boolean
Dim gang As Integer
Dim formheih As Integer
Private Sub Formular_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
wertRuecksetz()
anzBreit = 22
anzHoch = 14
anzFaecher = anzBreit * anzHoch
formhoch = anzHoch * hoFeld
formbreit = anzBreit * brFeld
Me.Width = formbreit + anzBreit * 5
Me.Height = formhoch + anzHoch * 5 + 200
formheih = Me.Height
grAuswahl.Location = New Point(5, Me.Height - grAuswahl.Height - 50)
belegterplatz = False
gang = 1
End Sub
Private Sub pruefeFeld(ByVal x, ByVal y, ByVal gang)
If x = 5 And y = 2 And gang = 1 Or x = 10 And y = 10 And gang = 1 Or gang = 3 Then
belegterplatz = True
Else
belegterplatz = False
End If
End Sub
Protected Overrides Sub OnPaint(ByVal pe As System.Windows.Forms.PaintEventArgs)
Dim i As Integer
Dim rand As New Pen(Color.GreenYellow)
Dim feldfarbe As Brush
i = 0
'rand.Color = Color.GreenYellow
feldfarbe = Brushes.Green
While i < anzFaecher
rechteck = New Rectangle(xFeld, yfeld, brFeld, hoFeld)
Dim g As Graphics = pe.Graphics
pruefeFeld(xlauf, ylauf, gang)
If belegterplatz = True Then
rand = Pens.RosyBrown
feldfarbe = Brushes.Red
Else
rand = Pens.YellowGreen
feldfarbe = Brushes.Green
End If
g.DrawRectangle(rand, rechteck)
g.FillRectangle(feldfarbe, rechteck)
xFeld = xFeld + brFeld + 5
If xFeld > Me.Width Or xlauf >= 20 Then
yfeld = yfeld + hoFeld + 5
ylauf = ylauf + 1
xFeld = 10
xlauf = 0
If yfeld > Me.Height Or ylauf >= 14 Then
Exit While
End If
End If
i = i + 1
xlauf = xlauf + 1
End While
wertRuecksetz()
End Sub
Private Sub Formular_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
End Sub
Private Sub wertRuecksetz()
brFeld = 50
hoFeld = 25
xFeld = 10
yfeld = 40
xlauf = 1
ylauf = 0
End Sub
Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged
rbCheck()
End Sub
Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged
rbCheck()
End Sub
Private Sub rbCheck()
If RadioButton1.Checked = True Then
gang = 1
End If
If RadioButton2.Checked = True Then
gang = 2
End If
If RadioButton3.Checked = True Then
gang = 3
End If
Refreshfelder()
End Sub
Private Sub RadioButton3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton3.CheckedChanged
rbCheck()
End Sub
Private Sub cmdRefresh_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdRefresh.Click
Refreshfelder()
End Sub
Private Sub Refreshfelder()
Me.Height = 0
Me.Height = formheih
End Sub
End Class
Comment