加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

隐藏TabControl的标签

发布时间:2021-05-20 14:35:55 所属栏目:大数据 来源: https://blog.csdn.net/kasama1
导读:隐藏TabControl的标签 ?? 2012-02-20 10:40:07 |??分类: ?c#? |??标签: tabcontrol?? | 举报 | 字号 ? 订阅 ? ? ? ? ??下载LOFTER 我的照片书??| 方法一 由于最近的项目需要,使用TabControl控件开发一个数据库分布同步向导,在最后封装时发现TabControl控

隐藏TabControl的标签??

2012-02-20 10:40:07|??分类:?c#?|??标签:tabcontrol??|举报|字号?订阅

? ? ? ?

??下载LOFTER 我的照片书??|

方法一

由于最近的项目需要,使用TabControl控件开发一个数据库分布同步向导,在最后封装时发现TabControl控件没有现成的隐藏标签的方法和属性;真是急煞人也!想办法解决吧。互联网的功能就是强大,虽然没有找到现成的解决方法,但我也了解的差不多了。经过尝试可以以如下方式实现TabControl的标签隐藏:

在窗体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 的绘制方式。

那位朋友有更好的方法,请拿出来分享学习吧!

方法二:

隐藏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标签的各种复杂视觉效果。??

方法三:

关于如何把TabControl 的上面的tab头(page页标签)隐藏

许多网友问这个问题,实际上无法办到。我找到了一个替代的办法,效果基本满足。

即:设置TabControl的ItemSize(1,1),大家有爱好的话可以一试。

<网友回复>

那这样要TabControl干嘛啊?

可以用Panel把它装起来,设置Location的Y值为负的就可以

<网友回复>当你想要隐藏的时候

if (this.tabMain.TabPages[ "tabpageThePage "] != null)

{

this.tabMain.TabPages.Remove(tabpageThePage);

}

当你想要显示的时候

if (this.tabMain.TabPages[ "tabpageThePage "] == null)

{

this.tabMain.TabPages.Add(tabpageThePage);

}

我想也许会简单点...

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读