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 的tabPage控件的标题不显示,只显示矩形框的内容

如何把tabControl 的tabPage控件的标题不显示,只显示矩形框的内容 1,步骤一重写tabControl 组件 ,添加一个组件 选中项目 邮件【添加】------【组件】 ...
  • u013918420
  • u013918420
  • 2015年01月16日 15:40
  • 1228

隐藏TabControl的标签

隐藏TabControl的标签   2012-02-20 10:40:07|  分类: c# |  标签:tabcontrol  |举报|字号 订阅      ...
  • kasama1953
  • kasama1953
  • 2016年06月08日 16:39
  • 2132

c#中给tabpage增加关闭按钮

先来看下效果 要实现这个功能,我们分两步来走,首先是需要绘制这个按钮,然后再对这个按钮的事件作出响应 1、将tabcontrol的绘制模式属性修改为OwnerDrawFixed,这...
  • u013944260
  • u013944260
  • 2017年08月05日 15:11
  • 1040

tabcontrol 控件的标签的隐藏【C#】

【方法一】由于最近的项目需要,使用TabControl控件开发一个数据库分布同步向导,在最后封装时发现TabControl控件没有现成的隐藏标签的方法和属性;真是急煞人也!想办法解决吧。互联网的功能就...
  • wonsoft
  • wonsoft
  • 2009年11月05日 16:34
  • 9088

C#仿QQ皮肤-TabControl控件实现

导读部分 ----------------------------------------------------------------------------------------------...
  • az44yao
  • az44yao
  • 2014年09月05日 11:26
  • 1837

C#利用tabControl控件实现多窗体嵌入及关闭

C#利用tabControl控件实现多窗体嵌入及关闭 2013-02-22      0 个评论       作者:wolfxin2010 收藏    我要投稿 创建一个主窗...
  • w1wqw
  • w1wqw
  • 2015年03月17日 22:42
  • 1732

c# tabcontrol控件标签如何隐藏?

Apperarance 属性:Faltbuttons SizeMode属性:Fixed 各个TabPage的Text :空 ItemSize : Width=0;Height=1;//Heigh...
  • liutian1234567890
  • liutian1234567890
  • 2015年07月07日 15:41
  • 418

VS控件Tabcontrol界面显示问题

VS的tabcontrol控件有个小问题,也不是小问题,就是当你的tabcontrol有多个tabpage时,除了第0个page会显示出来,其余的page只有当你点击显示的时候似乎才会init。尤其是...
  • wangxingguo1218
  • wangxingguo1218
  • 2013年12月31日 13:06
  • 2276

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

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

C# TabControl 不显示选项卡标题

C# TabControl 不显示选项卡标题 分类: C#2011-10-26 10:03 2034人阅读 评论(3) 收藏 举报 c#数据库互联网   由于最近的项目需要,使用TabC...
  • kendyhj9999
  • kendyhj9999
  • 2013年12月14日 23:56
  • 1609
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C# TabControl 不显示选项卡标题
举报原因:
原因补充:

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