zoukankan      html  css  js  c++  java
  • 隐藏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标签的各种复杂视觉效果。  
  • 相关阅读:
    myelipse与idea的javaweb项目创建
    入站规则和出站规则设置
    NAT技术基本原理与应用
    如何将sqlserver数据中的数据导出到服务器
    如何将SqlServer中表结构以及表数据全部导出
    国外服务器--新加坡服务器
    windows server2008 创建新用户 远程桌面连接 和 多用户登录问题
    程序员应该关注的国外IT网站
    IDEA创建普通java和web项目教程
    IIS Express 通过IP访问的方法和坑
  • 原文地址:https://www.cnblogs.com/luozhai714/p/1414241.html
Copyright © 2011-2022 走看看