Kepernyőre rajzolás már kirajzolt objektumok törlése nélkül

Kepernyőre rajzolás már kirajzolt objektumok törlése nélkül
2017-07-22T11:42:10+02:00
2017-07-22T12:52:00+02:00
2022-12-04T16:41:56+01:00
anclung
Egy Form-ra kirajzolok pl. címnek egy szöveget, egy kitöltött téglalapot háttérnek, majd erre a háttérre köröket úgy, hogy egy gomb megnyomására rajzolok egy kört, de a korábbit letörlöm.

Mivel objetumokat nem tudok közvetlenül törölni, jelenlegi ismereteim szerint ezt csak úgy tudom megvalósítani, hogy minden gombnyomáskor az invalidate() paranccsal újra kiváltom a Form Paint eseményét, vagyis újra rajzolom az egész Form-ot.

Kérdésem, hogy nincs-e erre valami jobb megoldás, hogy ne kelljen minden gombnyomáskor újra  mindent kirajzolni, hanem csak azt, ami szükséges (jelen esetben pl. a címet nyilván feleslegesen rajzolom újra és újra, hiszen annak a helyére soha nem kerül kör.) 

private void button_Click(object sender, MouseEventArgs e) { .... Invalidate(); } private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; g.DrawString("Cím", new Font("Arial", 14), brush1, 10, 10); g.FillRectangle(brush2, 10, 50, 250, 250); g.FillEllipse(brush3, x, y, r, r); g.Dispose(); }
Mutasd a teljes hozzászólást!
Három szokásos megoldás van:
1. amit most csinálsz
2. a kör is egy objektum, és minden más, amit rajzolsz, egy-egy objektum. Ekkor a GUI gondoskodik róla, hogy mindent újrarajzoljon.
3. egy bitmap-be rajzolod a fix képernyőt, majd gombnyomáskor kiteszed a bitmap-et, és rárajzolod az aktuális kört
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd