Announcement

Collapse
No announcement yet.

Onpaint manuell aufrufen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Onpaint manuell aufrufen

    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

  • #2
    Hallo,

    soweit ich Dein Vorhaben verstanden habe, sollte es mit dem folgendem Befehl realisierbar sein: Me.Refresh()

    Grüsse Rainer

    Comment


    • #3
      hihi manchmal sind die einfachsten lösungen doch die besten. danke genau das hats gebracht^^
      besser als meine lösung die quasi den neu zu zeichenden bereich dicht macht und neu aufbaut auch mit mach fenster klein und wieder groß^^

      Comment

      Working...
      X