C#窗體中Control以及Invalidate,Update,Refresh三種重繪方法的區(qū)別及說明
在 C# 中,Control
類是 Windows Forms 應(yīng)用程序中所有控件的基類。它提供了控件的基本功能和屬性,這些功能和屬性被所有繼承自 Control
類的子類所共享。
這意味著 Control
類是構(gòu)建 Windows Forms 應(yīng)用程序中用戶界面元素的基礎(chǔ)。
以下是 Control 類的一些關(guān)鍵特性和方法
屬性
Size
:獲取或設(shè)置控件的寬度和高度。Location
:獲取或設(shè)置控件在其容器中的位置。Visible
:獲取或設(shè)置控件是否可見。Enabled
:獲取或設(shè)置控件是否啟用。Text
:獲取或設(shè)置控件的文本。BackColor
:獲取或設(shè)置控件的背景顏色。ForeColor
:獲取或設(shè)置控件的前景色,通常是文本顏色。Font
:獲取或設(shè)置控件的字體。Parent
:獲取或設(shè)置控件的容器,通常是另一個(gè)控件或窗體。
方法
Invalidate()
:使控件的整個(gè)表面無效,從而觸發(fā)重繪。Update()
:立即重繪控件,通常在調(diào)用Invalidate()
后使用。Refresh()
:立即重繪控件,不推薦頻繁使用,因?yàn)樗赡軐?dǎo)致性能問題。Hide()
:隱藏控件,但不釋放資源。Show()
:顯示控件。Focus()
:將鍵盤輸入焦點(diǎn)設(shè)置到控件上。Select()
:選中控件,如果它是一個(gè)可以選擇的控件,如文本框。
事件
Paint
:當(dāng)控件需要重繪時(shí)觸發(fā)。Click
:當(dāng)用戶單擊控件時(shí)觸發(fā)。MouseEnter
和MouseLeave
:當(dāng)鼠標(biāo)進(jìn)入或離開控件時(shí)觸發(fā)。MouseMove
:當(dāng)鼠標(biāo)在控件上移動(dòng)時(shí)觸發(fā)。KeyDown
、KeyUp
和KeyPress
:與鍵盤輸入相關(guān)的事件。
構(gòu)造函數(shù)
Control()
:Control
類的構(gòu)造函數(shù),通常在創(chuàng)建自定義控件時(shí)使用。
繼承
許多常用的控件,如 Button
、TextBox
、Label
等,都是從 Control
類繼承而來的。
以下是如何在代碼中使用 Control
類的一個(gè)簡單示例:
- 例句:
public class MyForm : Form { private Button myButton;//用于存儲(chǔ)對(duì)按鈕控件的引用 public MyForm() { myButton = new Button(); myButton.Text = "Click Me";//設(shè)置按鈕上顯示的文本為 "Click Me" myButton.Location = new Point(100, 100);//設(shè)置按鈕在窗體上的位置。Point(100, 100) 表示按鈕的左上角將位于窗體坐標(biāo)的 (100, 100) 位置 myButton.Click += MyButton_Click;//為按鈕的 Click 事件添加了一個(gè)事件處理程序。當(dāng)按鈕被點(diǎn)擊時(shí),MyButton_Click 方法將被調(diào)用。 this.Controls.Add(myButton);//將 myButton 添加到窗體的 Controls 集合中。Controls 集合是窗體上所有控件的容器。通過將按鈕添加到這個(gè)集合中,按鈕將顯示在窗體上。 } private void MyButton_Click(object sender, EventArgs e)//sender 表示觸發(fā)事件的對(duì)象,e 表示包含事件數(shù)據(jù)的 EventArgs 對(duì)象。 { MessageBox.Show("你點(diǎn)擊了按鈕!");//用戶點(diǎn)擊按鈕時(shí)的反饋,反饋一個(gè)消息框 } }
Invalidate,Update,Refresh三種重繪方法的區(qū)別
Invalidate() 方法
- 例句:
this.Invalidate(); // 重繪整個(gè)控件或窗體 this.Invalidate(true); // 重繪并擦除背景 this.Invalidate(rect); // 僅重繪指定的矩形區(qū)域
Invalidate()
方法用于通知 Windows Forms 應(yīng)用程序的窗口系統(tǒng),指定的控件區(qū)域需要被重繪。- 這個(gè)方法會(huì)導(dǎo)致控件的
OnPaint
事件被觸發(fā),從而調(diào)用相應(yīng)的Paint
事件處理程序來重繪控件。 Invalidate()
方法可以帶有一個(gè)可選的bool
參數(shù),當(dāng)設(shè)置為true
時(shí),會(huì)導(dǎo)致擦除背景,這可能會(huì)引起閃爍。
Update() 方法
- 例句:
this.Invalidate(); this.Update();
Update()
方法通常在調(diào)用Invalidate()
方法后使用,它會(huì)強(qiáng)制立即處理WM_PAINT
消息,而不是等待消息隊(duì)列中的其他消息。- 這可以確??丶⒓幢恢乩L,而不是等到消息隊(duì)列中的其他消息被處理完。
Update()
方法通常用于確保在進(jìn)行了一系列更新后控件立即被重繪,例如在動(dòng)畫或連續(xù)更新場景中。
Refresh() 方法
- 例句:
this.Refresh();
Refresh()
方法是最簡單直接的重繪方法,它會(huì)立即重繪控件或窗體。- 與
Invalidate()
和Update()
不同,Refresh()
方法不依賴于OnPaint
事件,它直接調(diào)用OnPaint
方法,因此不會(huì)觸發(fā)Paint
事件。 Refresh()
方法通常用于需要立即更新顯示的場景,但它可能會(huì)導(dǎo)致性能問題,因?yàn)樗惶峁﹥?yōu)化重繪的機(jī)會(huì)。
區(qū)別總結(jié)
Invalidate()
是最常用的重繪方法,它提供了靈活性,允許控件在適當(dāng)?shù)臅r(shí)候重繪,并且可以通過參數(shù)控制是否擦除背景。(局部重繪,減少刷新次數(shù))Update()
通常與Invalidate()
一起使用,以確保立即處理重繪,而不是等待其他消息。(工作區(qū)重繪,全局重繪,比Invalidate刷新次數(shù)高)Refresh()
提供了最快的重繪方式,但它可能會(huì)引起性能問題,因?yàn)樗惶峁﹥?yōu)化的機(jī)會(huì)。(工作區(qū)重繪,重繪子控件,強(qiáng)制的,比Update刷新次數(shù)高 )
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- C#將部分Controls數(shù)據(jù)導(dǎo)入對(duì)象并存入ini中的操作方法
- C#中隱藏TabControl選項(xiàng)卡標(biāo)簽的解決方案
- C# TabControl控件中TabPage選項(xiàng)卡切換時(shí)的觸發(fā)事件問題
- C# TabControl手動(dòng)觸發(fā)DrawItem的實(shí)現(xiàn)
- C#中使用DevExpress中的ChartControl實(shí)現(xiàn)極坐標(biāo)圖的案例詳解
- C# datagridview、datagrid、GridControl增加行號(hào)代碼解析
- c# wpf如何使用Blend工具繪制Control樣式
相關(guān)文章
c# 多線程環(huán)境下控制對(duì)共享資源訪問的解決方法
這篇文章主要介紹了c# 多線程環(huán)境下控制對(duì)共享資源訪問的解決方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-07-07C#對(duì)Xamarin框架進(jìn)行數(shù)據(jù)綁定
這篇文章介紹了C#對(duì)Xamarin框架進(jìn)行數(shù)據(jù)綁定,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-01-01C# 串口接收數(shù)據(jù)中serialPort.close()死鎖的實(shí)例
下面小編就為大家分享一篇C# 串口接收數(shù)據(jù)中serialPort.close()死鎖的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-11-11C#實(shí)現(xiàn)數(shù)字轉(zhuǎn)換漢字的示例詳解
這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)數(shù)字轉(zhuǎn)換漢字功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下2022-12-12