C# TabControl控件中TabPage選項(xiàng)卡切換時(shí)的觸發(fā)事件問(wèn)題
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的話(huà),我們?cè)撛趺醋觥?/p>
首先,tabControl控件由若干個(gè)tabPage成員組成。而這些tabPage成員的屬性中并沒(méi)有visable屬性來(lái)控制它是否隱藏,那么怎么來(lái)實(shí)現(xiàn)隱藏呢?
首先,打開(kāi)From的代碼生成器:

翻到最下面我們可以看到如下幾行代碼。

這說(shuō)明了tabPage實(shí)際上是個(gè)類(lèi)。那么我們便可以正對(duì)具體的tabPage1/tabPage2/tabPage3進(jìn)行操作。選項(xiàng)卡隱藏一般不會(huì)再tabControl上。
查看TabPage類(lèi)的定義如下:

從上面的定義我們看了,有一個(gè)Visible的屬性。也許和選項(xiàng)卡的隱藏有關(guān)。雖然Visible官方說(shuō)明此成員對(duì)控件無(wú)意義。
但是經(jīng)過(guò)探索,發(fā)現(xiàn)他還是可以用的如下:

我們?cè)趖abPage1放一個(gè)Button控件便于觀察。
將隱藏和顯示兩個(gè)按鈕編寫(xiě)Click時(shí)間如下:

經(jīng)過(guò)試驗(yàn)可知,Visble屬性還是有效果的,只不過(guò)效果與我們想要的不太一樣。
當(dāng)點(diǎn)擊隱藏按鈕時(shí)如下:Button依靠的容器消失了。但是tabPage選項(xiàng)卡還在!??!

當(dāng)我們點(diǎn)擊顯示按鈕時(shí)如下:Button與其依符的容器又顯示出來(lái)了!??!
那么有沒(méi)有其他辦法呢?
綜合網(wǎng)上諸多的辦法,有一種比較方便就是利用TabPage類(lèi)中的Parent屬性設(shè)置TabPage成員依靠的父類(lèi)容器即可。
具體實(shí)現(xiàn)如下:

利用Parent屬性能夠?qū)崿F(xiàn)選項(xiàng)卡隱藏與顯示。
狀態(tài)如下:


那么為什么設(shè)置Parent屬性就能夠?qū)崿F(xiàn)隱藏呢?
經(jīng)過(guò)追蹤發(fā)現(xiàn)TabPage的Parent屬性實(shí)際在繼承鏈中的Control類(lèi)中。
換言之Parent是Control類(lèi)的屬性。TabPage類(lèi)是繼承Control類(lèi)的。而Parent屬性的解釋如下:

Parent屬性是控件的父容器?;旧厦總€(gè)控件都有個(gè)父容器。這是他們的依附的區(qū)域。如果父容器為空的話(huà),控件必然無(wú)法依附,自然也就不能顯示出來(lái)了。
窗體From是沒(méi)有Parent父容器屬性的,因?yàn)樗亲畹讓拥娜萜鳎。。?/p>
由于每個(gè)控件都有Parent,同理我們可以通過(guò)Parent屬性來(lái)控制任意控件的顯示與否。
如下,我們可以通過(guò)設(shè)置“顯示”按鈕的Parent屬性來(lái)設(shè)置隱藏。
如下:

當(dāng)隱藏按鈕按下的時(shí)候就設(shè)置顯示按鈕的父容器為空。
下面試驗(yàn)一下:

如下,設(shè)置成功??!
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C#如何控制IIS動(dòng)態(tài)添加刪除網(wǎng)站詳解
這篇文章主要給大家介紹了關(guān)于C#如何控制IIS動(dòng)態(tài)添加刪除網(wǎng)站的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
C# WinForm實(shí)現(xiàn)自動(dòng)更新程序的方法詳解
這一篇就著重寫(xiě)一下客戶(hù)端的代碼,客戶(hù)端主要實(shí)現(xiàn)的有:?jiǎn)?dòng)后檢測(cè)本地的xml文件,然后發(fā)送到服務(wù)器獲取需要更新的文件以及版本列表,感興趣的小伙伴可以了解一下2022-10-10

