GDI Fortschritt in einem Steuerelement anzeigen

14/07/2009 - 22:09 von Jakob Brunner, Luzern Switzerland | Report spam
Hoi zàme
Ich verstehe hier was nicht. Ich zeichen das Schienennetz der Schweiz in
einer Karte ein. Es ist wohl klar, dass dies eine Menge Punkte sind, welche
gezeichnet werden müssen. Ich zeichne diese Daten in ein Panel, in welche ich
vorher die Karte (Image) kopiert habe. Dazu verwende ich die Paint-Funktion
des Panels (panel_Paint(object sender, System.Windows.Forms.PaintEventArgs
e)).
Nun möchte ich in einem ProgressBar-Steuerelement den Ladezustand bzw. die
Fortschritt des Zeichnens der Punkte anzeigen. Wenn ich aus dieser
Paint-Funktion diese Progressbar, welche in der Form platziert ist, aufrufen
versuche, so passiert einfach nichts, so als ob die Befehle nicht umgesetzt
werden.

Kann ich beim Zeichnen in der Paint-Funktion nicht auf die Steuerelemente
der Form zugreifen?
Wer weiss mehr??
Danke!
Jakob Brunner. Switzerland
 

Lesen sie die antworten

#1 Elmar Boye
15/07/2009 - 09:33 | Warnen spam
Hallo Jakob,

"Jakob Brunner, Luzern Switzerland" schrieb ...
Ich verstehe hier was nicht. Ich zeichen das Schienennetz der Schweiz in
einer Karte ein. Es ist wohl klar, dass dies eine Menge Punkte sind, welche
gezeichnet werden müssen. Ich zeichne diese Daten in ein Panel, in welche ich
vorher die Karte (Image) kopiert habe. Dazu verwende ich die Paint-Funktion
des Panels (panel_Paint(object sender, System.Windows.Forms.PaintEventArgs
e)).



Achte dabei darauf, dass Du nur den ungültigen Bereich (ClipRectangle).
http://msdn.microsoft.com/de-de/lib...angle.aspx
neu zeichnest, ansonsten wird es schnell tràge, wenn nur ein Teil des
Fensters überdeckt wurde.

Da sich die Daten nicht so schnell àndern dürften, kann es besser sein,
die Daten zunàchst in eine Bitmap zu zeichnen und diese (ausschnittsweise)
anzuzeigen. Mit BufferedGraphics gibt es eine Klasse, die die Basis bereits
implementiert:
http://msdn.microsoft.com/de-de/lib...phics.aspx

Nun möchte ich in einem ProgressBar-Steuerelement den Ladezustand bzw. die
Fortschritt des Zeichnens der Punkte anzeigen. Wenn ich aus dieser
Paint-Funktion diese Progressbar, welche in der Form platziert ist, aufrufen
versuche, so passiert einfach nichts, so als ob die Befehle nicht umgesetzt
werden.

Kann ich beim Zeichnen in der Paint-Funktion nicht auf die Steuerelemente
der Form zugreifen?



Das funktioniert prinzipbedingt nicht.
Windows arbeitet mit Nachrichten, die in Warteschlange eingereiht und
in einer Meldungsschleife nacheinander abgearbeitet werden.
Auch das Progressbar Steuerelement aktualisisert sich auf diese Weise.
Solange das Formular nun im Paint Ereignis (WM_PAINT) für das Panel
steckt, wird die Warteschlange nicht weiter abgearbeitet.

Funktionieren kann das deswegen nur, wenn die Progressbar in einem
eigenen Formular steckt, das auch eine eigene Warteschlange hat
(z. B. ein Dialog).

Gruß Elmar

Ähnliche fragen