的Invalidate意味着你的油漆區不再有效.. 即,如果用戶調整窗口的大小和你所有的繪圖比例 應該給事件作出反應或如果事情應該從 圖形中被刪除,而它是在其他等等。 因此,假設如果您想對「無效」 做出反應,您需要刪除該區域並重新繪製所有內容。
這麼寫 - 這解釋了,但你真正需要的是一些陣列 保存,你需要繪製和使用無效 吸引他們的元素..即:(我將它寫在僞代碼)
List<Shape> Shapes = new List<Shape>();
ctor:
Shapes.Add(rect1);
Shapes.Add(rect2);
...
and so on..
void some_user_incoming_event(){
shapes.Add(rect200);
Invalidate();
}
public void Invalidate()
{
foreach(var shape in shapes) {code to draw specific shape}
}
如果你會使用這種策略,你會得到你想要的結果,但 在這個答案上面的筆記中提到 - 你需要停止 調用無效每隔X毫秒..或者你會看到閃爍。 取而代之的是,每當 發生變化時,您都需要手動調用Invalidate。
這種策略也被稱爲MVP(模型 - 視圖 - 主持人),其中 名單是你的模型,你的圖形面積是你的看法, 和您的invalidate()方法是您的主持人。
我希望這會有所幫助。
我會擺脫自動調用失效。在其OnPaint事件中執行所有Form的繪畫。如果其他操作需要立即重繪,則調用Invalidate。 – mbeckish
我有OnPaint事件,這是DrawRectangle方法的地方。問題是,當我調用DrawRectangle方法時,窗口「刷新」,但是當調用Invalidate方法時。 –