Add a HideTabs property to turn on/off the Tabs

From: http://www.dotnetrix.co.uk/tabcontrols.html

 1using System.ComponentModel;
 2using System.Drawing;
 3using System.Windows.Forms;
 4
 5namespace Dotnetrix.Samples.CSharp
 6{
 7    [ToolboxBitmap(typeof(System.Windows.Forms.TabControl))]
 8    public class TabControl : System.Windows.Forms.TabControl
 9    {
10        private bool m_HideTabs = false;
11        
12        [DefaultValue(false)]
13        [RefreshProperties(RefreshProperties.All)]
14        public bool HideTabs
15        {
16            get{return m_HideTabs;}
17            set
18            {
19                if (m_HideTabs == value) return;
20                m_HideTabs = value;
21                if (value == truethis.Multiline = true;
22                this.UpdateStyles();
23            }

24        }

25        
26        [RefreshProperties(RefreshProperties.All)]
27        public new bool Multiline 
28        {
29            get
30            {
31                if (this.HideTabs) return true;
32                return base.Multiline;
33            }

34            set
35            {
36               if (this.HideTabs)
37                    base.Multiline = true;
38                else
39                    base.Multiline = value;
40            }

41        }

42        
43        public override System.Drawing.Rectangle DisplayRectangle
44        {
45            get
46            {
47                if (this.HideTabs)
48                    return new Rectangle(00, Width, Height);
49                else
50                {
51                    int tabStripHeight, itemHeight;
52
53                    if (this.Alignment <= TabAlignment.Bottom)
54                        itemHeight = this.ItemSize.Height;
55                    else
56                        itemHeight = this.ItemSize.Width;
57
58                    if (this.Appearance == TabAppearance.Normal)
59                        tabStripHeight = 5 + (itemHeight * this.RowCount);
60                    else
61                        tabStripHeight = (3 + itemHeight) * this.RowCount;
62
63                    switch (this.Alignment)
64                    {
65                        case TabAlignment.Bottom:
66                            return new Rectangle(44, Width - 8, Height - tabStripHeight - 4);
67                        case TabAlignment.Left:
68                            return new Rectangle(tabStripHeight, 4, Width - tabStripHeight - 4, Height - 8);
69                        case TabAlignment.Right:
70                            return new Rectangle(44, Width - tabStripHeight - 4, Height - 8);
71                        default:
72                            return new Rectangle(4, tabStripHeight, Width - 8, Height - tabStripHeight - 4);
73                    }

74                }

75            }

76        }

77    }

78}

 

还有另外的方法对一个标准的TabControl控件实现隐藏TabPages的Tabs。只要将TabControl控件的四个属性作如下设置就可以了:

TabControl.Appearance = TabAppearance.FlatButtons
TabControl.Multiline = False
TabControl.SizeMode = TabSizeMode.Fixed
TabControl.ItemSize = New Size(0, 1)

不过,这时有一种情况可能是你不想看到的。那就在运行时刻,用户可以通过Ctrl+Tab和Ctrl+Shift+Tab来切换TabPage,即使Tabs没有显示也是如此的。这种情况我们可以通过下面的代码来避免。

 1protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
 2        {
 3            if ((keyData == (Keys.Control | Keys.Tab)) || (keyData == (Keys.Control | Keys.Shift | Keys.Tab)))
 4            {
 5                //Indicate that we've handled this keypress
 6                return true;
 7            }

 8            
 9            return base.ProcessCmdKey(ref msg, keyData);
10        }

 补充:ProcessCmdKey的另外一种写法。

1protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
2{
3    if (ActiveControl is TabControl)
4    {
5        if (System.Convert.ToBoolean(keyData & Keys.Tab | Keys.Control))
6            return true;
7    }

8    return base.ProcessCmdKey (ref msg, keyData);
9}

posted on 2006-09-18 23:36 Voidclass 阅读(1085) 评论(7)  编辑 收藏 所属分类: A. Windows Forms

评论

#1楼  2006-09-19 08:24 小新0574      

什么叫trun on/off ...   回复  引用  查看    

#2楼 [楼主] 2006-09-19 08:37 Voidclass      

@小新0574
开关...
用来切换TabPage的Tabs显示或者隐藏.   回复  引用  查看    

#3楼  2006-09-19 08:59 小新0574      

I think it should be "turn on/off", right?   回复  引用  查看    

#4楼  2006-09-19 08:59 沐枫      

干嘛这么麻烦,直接remove或insert该tabpage不就行了。   回复  引用  查看    

#5楼  2006-09-19 09:05 xc#      

有道理   回复  引用  查看    

#6楼 [楼主] 2006-09-19 09:09 Voidclass      

@小新0574

:-)
thx, 马上改来过!   回复  引用  查看    

#7楼 [楼主] 2006-09-19 09:14 Voidclass      

@沐枫

是的, 你的方法可以的.
不过是这样的, 我原来是做Delphi开发的.
在Delphi中TabPages Control是提供一个Hide Tabs的属性的, 在做Wizards等应用时十分方便, 但在.NET WinForm中的TabControl并没有提供这样的属性, 所以模拟一个, 我想有些朋友可能会有和我一样的需求.   回复  引用  查看    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-09-19 09:11 编辑过
 
 

导航

统计

与我联系

搜索

 

常用链接

留言簿(2)

我参与的团队

随笔分类(18)

随笔档案(18)

收藏夹(1)

友情博客

积分与排名

最新评论

阅读排行榜

评论排行榜