隐藏TabControl的标签

隐藏TabControl的标签,第1张

概述隐藏TabControl的标签  2012-02-20 10:40:07|  分类: c# |  标签:tabcontrol  |举报|字号 订阅      下载LOFTER我的照片书  |方法一由于最近的项目需要,使用TabControl 隐藏TabControl的标签  

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

@H_502_35@

@H_502_35@

@H_502_35@

@H_502_35@   下载LOFTER 我的照片书  |

方法一@H_502_35@

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

在窗体Load事件中添加:@H_502_35@

this.tabControl1.Region = new Region(new RectangleF(this.tabPage1.left,this.tabPage1.top,this.tabPage1.WIDth,this.tabPage1.Height));@H_502_35@

以上代码完成标签的隐藏,但还存在一个问题,就是Tab + Ctrl 可以切换TabControl中的页,可以通过捕捉按键消息屏蔽 组合键:@H_502_35@

        protected overrIDe bool ProcessCmdKey(ref Message msg,Keys keyData)@H_502_35@

        {@H_502_35@

            switch (keyData)@H_502_35@

            {@H_502_35@

                case (Keys.Tab | Keys.Control):@H_502_35@

                    return true;@H_502_35@

                default:@H_502_35@

                    break;@H_502_35@

            }@H_502_35@

            return base.ProcessCmdKey(ref msg,keyData);@H_502_35@

        }@H_502_35@

以上两步即可实现TabControl 标签的隐藏,如果要效果理想,可以调整TabControl 的appearance属性设置TabControl 的绘制方式。@H_502_35@

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

方法二:@H_502_35@

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

public class FTabControl : System.windows.Forms.TabControl{@H_502_35@

private System.ComponentModel.Container components = null;@H_502_35@

private static @R_419_6004@ Back@R_419_6004@=@R_419_6004@.FromArgb(227,237,251);@H_502_35@

private static @R_419_6004@ button@R_419_6004@;@H_502_35@

private static @R_419_6004@ buttonHighlight@R_419_6004@;@H_502_35@

private static @R_419_6004@ border@R_419_6004@=@R_419_6004@.Black;@H_502_35@

public bool UserChangeTab=true;@H_502_35@

public FTabControl(){@H_502_35@

InitializeComponent();@H_502_35@

SetDafaultStyle();@H_502_35@

SetStyle(ControlStyles.UserPaint,true);@H_502_35@

}@H_502_35@

#region Component Designer generated code@H_502_35@

private voID InitializeComponent(){@H_502_35@

components = new System.ComponentModel.Container();@H_502_35@

}@H_502_35@

#endregion@H_502_35@

public voID SetDafaultStyle(){@H_502_35@

Appearance = System.windows.Forms.TabAppearance.Flatbuttons;@H_502_35@

button@R_419_6004@ = @R_419_6004@.FromArgb(184,210,250);@H_502_35@

buttonHighlight@R_419_6004@ = @R_419_6004@.FromArgb(144,187,252);@H_502_35@

}@H_502_35@

protected overrIDe voID OnPaint(PaintEventArgs e){@H_502_35@

e.Graphics.FillRectangle(new SolIDBrush(Back@R_419_6004@),e.ClipRectangle);@H_502_35@

for (int i=0;i<this.TabCount;i++){@H_502_35@

DrawItem(e.Graphics,i);@H_502_35@

}@H_502_35@

}@H_502_35@

protected voID DrawItem(Graphics g,int index){@H_502_35@

Rectangle r = GetTabRect(index);@H_502_35@

r.Inflate(-2,-2);@H_502_35@

if (Selectedindex==index)@H_502_35@

g.FillRectangle(new SolIDBrush(buttonHighlight@R_419_6004@),r);@H_502_35@

else@H_502_35@

g.FillRectangle(new SolIDBrush(button@R_419_6004@),r);@H_502_35@

g.DrawRectangle(new Pen(new SolIDBrush(border@R_419_6004@)),r);@H_502_35@

r.Inflate(-3,-3);@H_502_35@

g.DrawString(TabPages[index].Text,Font,new SolIDBrush(border@R_419_6004@),r);@H_502_35@

}@H_502_35@

protected overrIDe voID WndProc(ref System.windows.Forms.Message m){@H_502_35@

if (m.Msg == 513 && !this.UserChangeTab ){@H_502_35@

return; //trap WM_LbuttonDOWN@H_502_35@

}@H_502_35@

else{@H_502_35@

base.WndProc(ref m);@H_502_35@

}@H_502_35@

}@H_502_35@

protected overrIDe voID OnKeyDown(KeyEventArgs e){@H_502_35@

if(e.Control==true && e.KeyCode==System.windows.Forms.Keys.Tab && !this.UserChangeTab){@H_502_35@

return; //trap CTRL+TAB and CTRL+SHIFT+TAB@H_502_35@

}@H_502_35@

else{@H_502_35@

base.OnKeyDown(e);@H_502_35@

}@H_502_35@

}@H_502_35@

}@H_502_35@

以下是对上面的例子代码的一点说明:@H_502_35@

1) public bool UserChangeTab成员的作用是规定是否允许用户在界面上通过鼠标点击标签和按"Ctrl+Tab"来改变当前标签页。@H_502_35@

2) 在构造函数中调用SetStyle()的目的是告诉系统这个控件将自行重画,而不是用系统默认的显示方式。@H_502_35@

3) OnPaint()完成的就是自行重画的工作,其中调用了DrawItem函数来重画所有的标签。@H_502_35@

4) SetDafaultStyle()的功能是设定一些默认的颜色和界面风格。@H_502_35@

5) 最重要的就是重载WndProc()和OnKeyDown()函数。在这两个重载函数中捕获了鼠标点击事件以及键盘输入事件。一旦this.UserChangeTab的值为false(即不允许用户来改变标签页),则将捕获的事件销毁,不再传递给基类的事件处理函数。@H_502_35@

使用这个FTabControl时,@H_502_35@

1) 如果需要禁止用户通过鼠标或者Ctrl+Tab改变标签页,需要设定UserChangeTab为false。@H_502_35@

2) 如果需要隐藏标签,需要将FTabControl的ItemSize属性设为(1,1),并适当调整颜色设置以达到视觉上看不出的效果。@H_502_35@

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

方法三:@H_502_35@

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

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

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

<网友回复>@H_502_35@

那这样要TabControl干嘛啊?@H_502_35@

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

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

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

{@H_502_35@

this.tabMain.TabPages.Remove(tabpageThePage);@H_502_35@

}@H_502_35@

当你想要显示的时候@H_502_35@

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

{@H_502_35@

this.tabMain.TabPages.Add(tabpageThePage);@H_502_35@

}@H_502_35@

我想也许会简单点...@H_502_35@ 总结

以上是内存溢出为你收集整理的隐藏TabControl的标签全部内容,希望文章能够帮你解决隐藏TabControl的标签所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1213086.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存