vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: Rechteck zeichnen 
Autor: Preisser
Datum: 24.02.11 13:55

Hallo,

also, ein Paint-Ereignis wird ausgelöst, wenn ein Bereich der Form neu gezeichnet werden muss. Das passiert entweder durch das Betriebssystem, wenn beispielsweise das Fenster minimiert war und der Anwender es dann wiederherstellt, oder durch das Programm selbst, wenn es etwas neu zeichnen will.

Wann ein Paint-Ereignis auftritt oder wie oft es auftritt, ist nicht vorhersehbar. Deswegen sollte es nur dazu dienen, tatsächlich was zu zeichnen, nicht aber, um programmtechnische Sachen wie das Ändern der Koordinaten eines Rechtecks, welches gezeichnet werden soll, auszuführen.

Das Me.Invalidate() im Timer sagt dem Betriebssystem, dass das Programm die Form neu zeichnen will. Das Betriebssystem entscheidet dann, ob es eine neue Paint-Nachricht an das Programm schickt. Wenn das Programmfenster beispielsweise minimiert ist, wäre es völlig unnötig, etwas neu zu zeichnen, da es sowieso nicht sichtbar ist. Deshalb wird in diesem Fall kein Paint-Ereignis ausgelöst, und das Rechteck bleibt deswegen stehen, da seine Koordinaten auch nicht mehr erhöht werden.

Um nun die Koordinaten des Rechtecks im Timer, statt im Paint-Ereignis zu ändern, müsstest du die "i"-Variable global (also als Objektvariable der Form) deklarieren, damit diese im Timer erhöht werden kann, und im Paint-Ereignis dazu benutzt werden kann, um das Rechteck zu zeichnen.

Basierend auf deinem letzten Code könnte das dann so aussehen (ich hab die Variable "i" durch "RechteckTimerTickcount" ersetzt):
Public Class Form1
 
    Private Stift As New Pen(Color.Blue, 5)
    Private Pinsel As New SolidBrush(Color.Red)
    Private RechteckTimerTickcount As Integer = 0
 
    Private Sub Form1_Paint(ByVal sender As Object, _
      ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        Dim Z As Graphics = e.Graphics
        ' Rechteck zeichnen mit der x-Koordinate "RechteckTimerTickcount"
        Z.DrawRectangle(Stift, RechteckTimerTickcount + 50, 50, 200, 100)
        Z.FillRectangle(Pinsel, RechteckTimerTickcount + 50, 50, 200, 100)
    End Sub
 
    Private Sub RechteckButton_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles RechteckButton.Click
        RechteckTimer.Enabled = True
    End Sub
 
    Private Sub RechteckTimer_Tick(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles RechteckTimer.Tick
        RechteckTimerTickcount += 1 ' X-Koordinate des Rechtecks erhöhen
        Me.Invalidate() ' Neues Paint-Ereignis vom System anfordern
    End Sub
 
End Class
Allerdings gibt es auch, wie Manfred sagte, die Klasse Rectangle, die ein Rechteck darstellt. Man könnte statt einer reinen x-Koordinate dann auch eine Variable als Rectangle deklarieren und dieses im Timer verändern, sodass es dann später im Paint-Ereignis gezeichnet werden kann.

Beitrag wurde zuletzt am 24.02.11 um 14:07:27 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Rechteck zeichnen5.470Earny21.02.11 18:36
Re: Rechteck zeichnen4.591Preisser21.02.11 19:04
Re: Rechteck zeichnen4.558Earny21.02.11 21:24
Re: Rechteck zeichnen4.937ModeratorFZelle21.02.11 22:45
Re: Rechteck zeichnen4.498Preisser21.02.11 23:29
Re: Rechteck zeichnen4.507Earny22.02.11 09:34
Re: Rechteck zeichnen4.656Manfred X22.02.11 12:47
Re: Rechteck zeichnen4.752Preisser22.02.11 14:21
Re: Rechteck zeichnen4.634Manfred X22.02.11 15:02
Re: Rechteck zeichnen4.538Preisser22.02.11 15:16
Re: Rechteck zeichnen4.655Manfred X22.02.11 15:29
Re: Rechteck zeichnen4.638Earny22.02.11 15:07
Re: Rechteck zeichnen4.518Preisser22.02.11 15:21
Re: Rechteck zeichnen4.519Earny22.02.11 20:02
Re: Rechteck zeichnen4.615Preisser22.02.11 20:09
Re: Rechteck zeichnen4.881Earny22.02.11 20:55
Re: Rechteck zeichnen4.557Preisser22.02.11 21:47
Re: Rechteck zeichnen4.515Earny23.02.11 17:06
Re: Rechteck zeichnen4.649Preisser24.02.11 13:55
Re: Rechteck zeichnen4.505Earny24.02.11 18:47
Re: Rechteck zeichnen4.482ModeratorFZelle22.02.11 15:47
Re: Rechteck zeichnen4.576Earny22.02.11 09:27
Re: Rechteck zeichnen4.543ModeratorFZelle22.02.11 09:46
Re: Rechteck zeichnen4.483Earny22.02.11 14:25

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel