C# TabControl控件中TabPage選項(xiàng)卡切換時(shí)的觸發(fā)事件問題
TabControl控件中TabPage選項(xiàng)卡切換時(shí)的觸發(fā)事件
選項(xiàng)卡切換觸發(fā)的是TabControl控件的SelectedIndexChanged事件。
當(dāng)TabControl控件的任何一個(gè)TabPage被點(diǎn)擊或選擇,即發(fā)生SelectedIndexChanged事件事件。
代碼如下:
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) { if (tabControl1.SelectedIndex == 0)//也可以判斷tabControl1.SelectedTab.Text的值 { //執(zhí)行相應(yīng)的操作 tabPageSubject.Parent = tabControlExtract;//顯示 } else if (tabControl1.SelectedIndex == 1) { //執(zhí)行相應(yīng)的操作 tabPageSubject.Parent = null; //隱藏選項(xiàng)卡tabPageSubject } }
C#選項(xiàng)卡TabControl控件隱藏執(zhí)行選項(xiàng)卡的方式
如下圖窗體:
如果我們想要隱藏tabPage1的話,我們該怎么做。
首先,tabControl控件由若干個(gè)tabPage成員組成。而這些tabPage成員的屬性中并沒有visable屬性來控制它是否隱藏,那么怎么來實(shí)現(xiàn)隱藏呢?
首先,打開From的代碼生成器:
翻到最下面我們可以看到如下幾行代碼。
這說明了tabPage實(shí)際上是個(gè)類。那么我們便可以正對具體的tabPage1/tabPage2/tabPage3進(jìn)行操作。選項(xiàng)卡隱藏一般不會再tabControl上。
查看TabPage類的定義如下:
從上面的定義我們看了,有一個(gè)Visible的屬性。也許和選項(xiàng)卡的隱藏有關(guān)。雖然Visible官方說明此成員對控件無意義。
但是經(jīng)過探索,發(fā)現(xiàn)他還是可以用的如下:
我們在tabPage1放一個(gè)Button控件便于觀察。
將隱藏和顯示兩個(gè)按鈕編寫Click時(shí)間如下:
經(jīng)過試驗(yàn)可知,Visble屬性還是有效果的,只不過效果與我們想要的不太一樣。
當(dāng)點(diǎn)擊隱藏按鈕時(shí)如下:Button依靠的容器消失了。但是tabPage選項(xiàng)卡還在?。?!
當(dāng)我們點(diǎn)擊顯示按鈕時(shí)如下:Button與其依符的容器又顯示出來了?。?!
那么有沒有其他辦法呢?
綜合網(wǎng)上諸多的辦法,有一種比較方便就是利用TabPage類中的Parent屬性設(shè)置TabPage成員依靠的父類容器即可。
具體實(shí)現(xiàn)如下:
利用Parent屬性能夠?qū)崿F(xiàn)選項(xiàng)卡隱藏與顯示。
狀態(tài)如下:
那么為什么設(shè)置Parent屬性就能夠?qū)崿F(xiàn)隱藏呢?
經(jīng)過追蹤發(fā)現(xiàn)TabPage的Parent屬性實(shí)際在繼承鏈中的Control類中。
換言之Parent是Control類的屬性。TabPage類是繼承Control類的。而Parent屬性的解釋如下:
Parent屬性是控件的父容器?;旧厦總€(gè)控件都有個(gè)父容器。這是他們的依附的區(qū)域。如果父容器為空的話,控件必然無法依附,自然也就不能顯示出來了。
窗體From是沒有Parent父容器屬性的,因?yàn)樗亲畹讓拥娜萜鳎。。?/p>
由于每個(gè)控件都有Parent,同理我們可以通過Parent屬性來控制任意控件的顯示與否。
如下,我們可以通過設(shè)置“顯示”按鈕的Parent屬性來設(shè)置隱藏。
如下:
當(dāng)隱藏按鈕按下的時(shí)候就設(shè)置顯示按鈕的父容器為空。
下面試驗(yàn)一下:
如下,設(shè)置成功!!
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
WinForm中變Enter鍵為Tab鍵實(shí)現(xiàn)焦點(diǎn)轉(zhuǎn)移的方法
這篇文章主要介紹了WinForm中變Enter鍵為Tab鍵實(shí)現(xiàn)焦點(diǎn)轉(zhuǎn)移的方法,主要通過一個(gè)ControlTools類來實(shí)現(xiàn)該功能,需要的朋友可以參考下2014-08-08c# socket網(wǎng)絡(luò)編程接收發(fā)送數(shù)據(jù)示例代碼
這篇文章主要介紹了c# socket網(wǎng)絡(luò)編程,server端接收,client端發(fā)送數(shù)據(jù),大家參考使用吧2013-12-12WPF ProgressBar實(shí)現(xiàn)實(shí)時(shí)進(jìn)度效果
這篇文章主要介紹了WPF ProgressBar實(shí)現(xiàn)實(shí)時(shí)進(jìn)度效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12C#自動生成漂亮的水晶效果頭像的實(shí)現(xiàn)代碼
這篇文章主要介紹了C#自動生成漂亮的水晶效果頭像的實(shí)現(xiàn)代碼,有需要的朋友可以參考一下2013-12-12