Control.Invalidate方法:使控件的特定區域無效並向控件發送繪制消息。
通常情況下,用Invalidate()使區域無效就可觸發該控件的重畫了,但在一些條件下卻沒有觸發重畫.
例如:
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = "888";
textBox1.Invalidate();
//textBox1.Update();
// textBox1.Refresh();
Thread.Sleep(5000);
textBox1.Text = "999";
}
這是由於Thread.Sleep(5000)這一句的存在,textBox1雖然Invalidate()了,但並沒有顯示"888",而是5秒后直接顯示999了.
得用textBox1.Update();或textBox1.Refresh();才行.
Control.Update 方法:使控件重繪其工作區內的無效區域。
Control.Refresh 方法:強制控件使其工作區無效並立即重繪自己和任何子控件;
等效於將 Invalidate 方法設置為 true 並將該方法與 Update 一起使用。
那么既然有了Update,為何還要存在Invalidate呢?
原因是Invalidate有重載的版本例如:Invalidate(Rectangle, Boolean) 使控件的指定區域無效(將其添加到控件的更新區域,下次繪制操作時將重新繪制更新區域),並向控件發送繪制消息。還可以使分配給該控件的子控件無效
其實Invalidate 方法控制繪制或重新繪制的內容。Update 方法才是控制發生繪制或重新繪制的時間(即執行重繪制命名).