如何隐藏TabControl中TabPage的页标签

隐藏TabControl的标签必须通过继承TabControl并自行重画来实现。下面是一个重画TabControl的完整的例子:   
    
ContractedBlock.gif ExpandedBlockStart.gif Code
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标签的各种复杂视觉效果。  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值