Paint Ereignis von Form
-
Guten Moregn,
ich habe eine Form in der ich eine PictureBox eingefügt habe. Die PictureBox wird mit einem Bild geladen, das größer ist als die maximierte Form. Die Eigenschaft Autoscroll der Form ist ture. Die Eigenschaft SizeMode der PictureBox ist Autosize. Zum neu zeichnen benutze ich die Ereignisse Resize und Paint der Form. Das Eriegnis Paint von PctureBox wird selbst bei einer Bewegung der Mouse aufgerufen was den Programmablauf erheblich stört.Mein Problem:
Ist die Form NICHT maximiert und ich verschiebe den sichtbaren Bildausschnitt mit den Scrollbars wird das Ereignis Paint der Form nicht aufgerufen.Was kann ich tun?
Danke für die Hilfe
Evi48
-
Ich würde nicht bei jedem OnMouseMove ein repaint aufrufen. Das ist nicht besonders performant und da du indem du mit der Maus drüberfährst ja keine Änderungen vornimmst wird auch nichts dran geändert was neu gezeichnet werden müsste.
Wegem dem Scrollproblem: Versuch mal ein OnMouseDown und OnMouseUp einzubauen und teste ob er darauf reagiert wenn du auf die Scrollbar klickst (bin mir gerade nicht sicher, sollte aber klappen). Wenn ja, dann hast du dein Problem gelöst. Dann kannst du nämlich beim OnMouseUp deine Paint-Funktion wieder aufrufen. Um es noch zu erweitern könntest du auch beim OnMouseDown die aktuelle Position im Bild speichern und dann beim OnMouseUp abfragen ob überhaupt was geändert wurde was repainted werden muss.
-
Hallo Pulse,
danke für den Tipp werden ich versuchen.Das OnMouseMove Ereignis nutze ich nicht. Doch wenn ich das Paint Ereignis von PictureBox verwende verhält sich das Programm beim Bewegen der Mouse so.
Evi48
-
Hi da bin ich wieder
das OnMouseUp der Form wird leider nicht bei den Scrollbars ausgelöst.Evi48
-
Er zählt den Scrollbalken nicht dazu? Komisch. Tja dann musst du wohl mit dem OnMouseMove arbeiten. Frag einfach mit if(e.Button == MouseButtons.Left) ab ob die linke Maustaste gedrückt wurde und rufe nur dann ein repaint auf. Zwar auch nicht besonders schön aber wenigstens funktioniert es dann...
-
wie wärs einfach mit PictureBox.Move-Ereignis ?
-
System.EventHandler ControlMove
Occurs when the control is movedund ich verschiebe den sichtbaren Bildausschnitt mit den Scrollbars
Ich kann da einen Unterschied erkennen zwischen Bewegen vom ganzen Control und bewegen vom Inhalt des Controls. Oder wird beim MoveEvent auch sowas beachtet?
-
so wi ich es verstanden habe, ist picturesbox u.U. größer als form und dann werde scrollbars automatisch (von form) angezeigt. wenn man jetzt die scrollbars verschiebt, werden alle controls, die zu form gehören einfach verschoben. und dabei wird Move-Event ausgelöst.
[EDIT]
und mitund ich verschiebe den sichtbaren Bildausschnitt mit den Scrollbars
bin ich mir sicher meint evi Picturebox. wäre es anders, und evi scrollbars uf form plaziert hat, um "sichtbaren Bildausschnitt" zu verschieben, hätte man einfach Scroll-Ereignis der Scrollbars auswerten und behandeln können
[/EDIT]
-
Vielen Dank für Eure Hilfe.
Es funktioniert jetzt mit den Ereignissen: OnPaint von Form und OnMove von PictureBox.
Ein schönes Wochenende
Evi48