C#標(biāo)簽的制作:多標(biāo)簽的實(shí)現(xiàn)
.Net Framework 內(nèi)置的TabControl容器提供了多標(biāo)簽的界面,自動(dòng)封裝了標(biāo)簽的新建、刪除、切換等功能,但是這個(gè)控件實(shí)在長得難看,所以這里介紹自己制作標(biāo)簽的方法。
首先是用什么控件來做標(biāo)簽,一開始我用Label,但是Label很難看,所以就改用Button。
然后用一個(gè)Panel容器來做標(biāo)簽欄,也就是說它是所有標(biāo)簽的父容器。
C#標(biāo)簽的新建:
- Button btn1=new Button();
- btn1.Width=150;
- btn1.Dock=DockStyle.Left;
- panel2.Controls.Add(btn1);
這里只設(shè)定了寬度,而它的位置、高度都不用設(shè),因?yàn)樵谶@里用到了btn1.Dock=DockStyle.Left,這樣標(biāo)簽就始終會(huì)??吭趐anel2的左側(cè),標(biāo)簽的top就是0,height就是panel2的高度。如果你想要自定義top和height怎么辦?可以設(shè)一下panel2的Padding屬性,比如設(shè)為(0,0,5,5),則標(biāo)簽的top就是5,bottom就是panel2的高度-5,width就是panel2的高度-10。
那么,標(biāo)簽的left是多少?因?yàn)槊恳粋€(gè)標(biāo)簽的Dock都是Left,所以標(biāo)簽會(huì)自動(dòng)按順序從左到右排列,如果中途刪除了某個(gè)標(biāo)簽,它右邊的標(biāo)簽就會(huì)自動(dòng)過來補(bǔ)充,如果插入新的標(biāo)簽,則它會(huì)自動(dòng)擠開右邊的標(biāo)簽,這就是Dock屬性的好處。
標(biāo)簽按什么順序排列?按Zorder,即控件顯示的前后順序,如果兩個(gè)控件有重疊區(qū)域,則Zorder較高的控件會(huì)遮住另一個(gè)。通常后添加的控件Zorder較高。你可以用Control.BringToFront,或Control.SentToBack方法使一個(gè)控件處于Zorder的最前面或***面。對于Dock在左邊的控件,Zorder高的控件在Zorder低的控件的右邊。
每一個(gè)標(biāo)簽都會(huì)對應(yīng)一個(gè)WebBrowser控件,在新建標(biāo)簽的同時(shí)也會(huì)新建一個(gè)WebBrowser,我們用一個(gè)panel3來顯示W(wǎng)ebBrowser。
- WebBrowser wb1=new WebBrowser();
- wb1.Dock=DockStyle.Fill;
- panel3.Controls.Add(wb1);
這樣wb1自動(dòng)充滿整個(gè)panel3。
C#標(biāo)簽的切換:
假設(shè)原來激活標(biāo)簽的是btn1,現(xiàn)在點(diǎn)擊了btn2,兩個(gè)標(biāo)簽對應(yīng)的WebBrowser為wb1,wb2,則
- panel3.Controls.Add(wb2);
- panel3.Controls.Remove(wb1);
就可切換標(biāo)簽。
關(guān)鍵是如何將每個(gè)標(biāo)簽與WebBrower綁定,可以使用標(biāo)簽的Tag屬性,也可以建立一個(gè)標(biāo)簽數(shù)組和WebBrower數(shù)組,使其中同位置的元素一一對就,兩種方法都可以。
C#標(biāo)簽的關(guān)閉:
移除標(biāo)簽 panel2.Controls.Remove(btn1);
然后要從panel3移除標(biāo)簽所代表的WebBrowser,同時(shí)關(guān)閉標(biāo)簽后還要記得激活其它的標(biāo)簽。
***還要調(diào)用WebBrowser.Dispose();以釋放它占用的資源。
在標(biāo)簽上顯示網(wǎng)頁的標(biāo)題:
可以在WebBrowser的DocumentTitleChanged事件中,用btn1.Text=((WebBrowser)sender).DocumentTitle;
【編輯推薦】