C# TabControl 不显示选项卡标题

转载 2013年12月05日 10:01:02

方法一:

在窗体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);
        }

这个依旧存在BUG,用Tab键,把焦点能放在选项卡上,然后用左右键控制。

如果加上屏蔽TAB键,和左右键,都可能导致一些用户操作上的BUG。


方法二:

隐藏TabControl的标签必须通过继承TabControl并自行重画来实现。下面是一个重画TabControl的完整的例子:

public class FTabControl : System.Windows.Forms.TabControl{
private System.ComponentModel.Container components = null;
private static Color BackColor=Color.FromArgb(227,237,251);
private static Color ButtonColor;
private static Color ButtonHighlightColor;
private static Color BorderColor=Color.Black;
public bool UserChangeTab=true;

public FTabControl(){
InitializeComponent();
SetDafaultStyle();
SetStyle(ControlStyles.UserPaint,true);
}

#region Component Designer generated code
private void InitializeComponent(){
components = new System.ComponentModel.Container();
}
#endregion

public void SetDafaultStyle(){
Appearance = System.Windows.Forms.TabAppearance.FlatButtons;
ButtonColor = Color.FromArgb(184,210,250);
ButtonHighlightColor = Color.FromArgb(144,187,252);
}

protected override void OnPaint(PaintEventArgs e){
e.Graphics.FillRectangle(new SolidBrush(BackColor),e.ClipRectangle);
for (int i=0;i<this.TabCount;i++){
DrawItem(e.Graphics,i);
}
}

protected void DrawItem(Graphics g,int index){
Rectangle r = GetTabRect(index);
r.Inflate(-2,-2);
if (SelectedIndex==index)
g.FillRectangle(new SolidBrush(ButtonHighlightColor),r);
else
g.FillRectangle(new SolidBrush(ButtonColor),r);
g.DrawRectangle(new Pen(new SolidBrush(BorderColor)),r);
r.Inflate(-3,-3);
g.DrawString(TabPages[index].Text,Font,new SolidBrush(BorderColor),r);
}

protected override void WndProc(ref System.Windows.Forms.Message m){
if (m.Msg == 513 && !this.UserChangeTab ){
return; //trap WM_LBUTTONDOWN
}
else{
base.WndProc(ref m);
}
}

protected override void OnKeyDown(KeyEventArgs e){
if(e.Control==true && e.KeyCode==System.Windows.Forms.Keys.Tab && !this.UserChangeTab){
return; //trap CTRL+TAB and CTRL+SHIFT+TAB
}
else{
base.OnKeyDown(e);
}
}
}

以下是对上面的例子代码的一点说明:
1) public bool UserChangeTab成员的作用是规定是否允许用户在界面上通过鼠标点击标签和按"Ctrl+Tab"来改变当前标签页。
2) 在构造函数中调用SetStyle()的目的是告诉系统这个控件将自行重画,而不是用系统默认的显示方式。
3) OnPaint()完成的就是自行重画的工作,其中调用了DrawItem函数来重画所有的标签。
4) SetDafaultStyle()的功能是设定一些默认的颜色和界面风格。
5) 最重要的就是重载WndProc()和OnKeyDown()函数。在这两个重载函数中捕获了鼠标点击事件以及键盘输入事件。一旦this.UserChangeTab的值为false(即不允许用户来改变标签页),则将捕获的事件销毁,不再传递给基类的事件处理函数。

使用这个FTabControl时,
1) 如果需要禁止用户通过鼠标或者Ctrl+Tab改变标签页,需要设定UserChangeTab为false。
2) 如果需要隐藏标签,需要将FTabControl的ItemSize属性设为(1,1),并适当调整颜色设置以达到视觉上看不出的效果。

需要说明的是,通过上面这个例子,不但可以实现隐藏Tab标签、禁止用户改变标签等功能,通过扩充DrawItem函数还可以实现Tab标签的各种复杂视觉效果。


Hogwarts - S(u)ddenly dis@ppeared...

本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。  
为了为您创建更好的讨论环境,请参加我们的用户满意度调查(http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。 

Tabcontrol中隐藏显示某个选项卡

显示是:选项卡名.Parent=tabControl; 隐藏式:选项卡名.Parent=null

C#中的TabControl控件的选项卡如何隐藏?

隐藏:Tab1.TabPage3.Parent = null; 显示:Tab1.TabPage3.Parent =Tab1; tab1为tab控件名,TabPage3为选项卡名。...
  • bbfesa
  • bbfesa
  • 2016年07月06日 09:57
  • 929

C# TabControl控件,隐藏选项卡

http://blog.163.com/zhaoyanping_1125/blog/static/201329153201210623146717/ 在使用TabControl控件时...

如何把tabControl 的tabPage控件的标题不显示,只显示矩形框的内容

如何把tabControl 的tabPage控件的标题不显示,只显示矩形框的内容 1,步骤一重写tabControl 组件 ,添加一个组件 选中项目 邮件【添加】------【组件】 ...

Flex中如何使用A标签解决Text中给部分文字加连接的问题。

在最近开发中遇见了一个问题,在一个Text中需要在其中部分文字中加上连接,连接点击后弹出TitleWindow。如果可以将文字分成多个组件弹出TitleWindow当然很简单,但是现在由于显示的字是动...

C#显示PDF文件[转载]

1.在工具箱中添加Adobe提供的ActiveX控件,如图所示:  拖一个Adobe PDF Reader控件到窗体上,双击窗体,在窗体加载时,弹出对话框,加载PDF文件:string fileNam...

c#TabControl控件左边选项卡左边显示,文字横向显示

c#TabControl控件左边选项卡左边显示,文字横向显示 2015-12-17 10:50 259人阅读 评论(0) 收藏 举报  分类: c#开发(6)  ...

TabControl实现Windows选项卡效果.rar

  • 2010年07月01日 11:29
  • 44KB
  • 下载

tabControl编辑选项卡图标

1、添加控件imageList 2、讲选好的图标添加到imageList中 3、设置tabControl的ImageList属性为添加的imageList1 4、最后一步,选中tabcontr...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C# TabControl 不显示选项卡标题
举报原因:
原因补充:

(最多只允许输入30个字)