2011年11月14日

隱藏 tabControl 控件的 頁標籤 (TabPage Header)

多頁容器控件(如 tabControl )可以讓我們在一個控件中放入多個頁面 , 以應各種時機點需要操作不同的頁面 , 使用者也可自行點選多頁容器控件上的頁標籤切換頁面 ; 但有時我們希望由程式自行控制頁面 , 不讓使用者任意按頁標籤切換頁面 , 例如讓使用者一開始在第一頁操作 , 輸入某些欄位值後才允許進到第二頁或第三頁等 , 由程式決定切換到哪一頁 , 這時我們便需要隱藏頁標籤了 , 讓使用者永遠只看到一頁畫面 ; 當然 , 使用者也不需要知道總共有幾頁畫面 , 依據操作選擇 , 程式會自動決定下一頁該跳到哪一頁
可是 .NET 的控件真的很陽春 , tabControl 控件居然沒有 隱藏或關閉頁標籤 (TabPage Header) 的屬性 , 找了好久終於有 "山不轉路轉" 的替代方案 , 只要設定三個屬性 , 便可在 "視覺" 上達到好像看不到頁標籤的效果


只要改變 tabControl 的下面三個屬性 , 即可隱藏 TabPage Header (頁標籤)
private void button1_Click(object sender, System.EventArgs e)
{
  tabControl1.SizeMode=TabSizeMode.Fixed;  
  tabControl1.Appearance= TabAppearance.FlatButtons;
  tabControl1.ItemSize=new Size(0, 1);
}

或是
private void Form1_Load(object sender, EventArgs e)
        {
            //不要看到 tabControl1 頁標籤的作法 :
            //
            //於開發環境下 , tabControl1.SizeMode  設成 "Fixed";  
            //               tabControl1.ItemSize  設成 "1,1"; 
            //               tabControl1.Alignment 設成 "Bottom"
            //並在 Runtime 時 , Form1_Load 加入以下
            this.tabControl1.Region = new Region(new RectangleF(this.tabPage1.Left, this.tabPage1.Top, this.tabPage1.Width, this.tabPage1.Height));

           //改變 tabControl 背景顏色
            for (int i = 0; i < tabControl1.TabCount; i++)
                tabControl1.TabPages[i].BackColor = System.Drawing.SystemColors.Control;
        }


■ 範例參考
以下畫面中間 LCD 顯示區即為 tabControl , 共有四頁畫面 , 若帶著 頁標籤 (TabPage Header) , 畫面就很難看了





■ 其它網路文章參考 : c# 如何隱藏TabControl控制項的標籤
□ 方法一:將標籤縮小到機會看不到:設置頁面的大小模式會自動適合(會儘量佔有空間);將標籤(Item)的大小設置為最小(無寬度,高度為1)
TabControl.SizeMode = TabSizeMode.Fixed
TabControl.ItemSize = New Size(0, 1)
□ 方法二:將TabControl放入到Panel,將位置上移,用Panel遮擋住標籤
□ 方法三:在表單Load事件中添加:
this.tabControl1.Region = new Region(new RectangleF(this.tabPage1.Left, this.tabPage1.Top, this.tabPage1.Width, this.tabPage1.Height));

以上代碼完成標籤的隱藏,但還存在一個問題,就是Tab + Ctrl 可以切換TabControl中的頁,可以通過捕捉按鍵消息遮罩 組合鍵:
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
    switch (keyData)
    {
      case (Keys.Tab | Keys.Control):
        return true;
      default:
        break;
    }
    return base.ProcessCmdKey(ref msg, keyData);
    }
以上兩步即可實現TabControl 標籤的隱藏,如果要效果理想,可以調整TabControl 的appearance屬性設置TabControl 的繪製方式。

没有评论:

发表评论