C#重绘TabControl的Tabpage标签,添加图片及关闭按钮

using  System;   
using  System.Collections.Generic;   
using  System.ComponentModel;   
using  System.Data;   
using  System.Drawing;   
using  System.Linq;   
using  System.Text;   
using  System.Windows.Forms;   
  
namespace  TabControlTest   
{   
    
public   partial   class  Form1 : Form   
    {   
        
public  Form1()   
        {   
            InitializeComponent();   
        }   
  
        
const   int  CLOSE_SIZE  =   15 ;   
        Bitmap image 
=   new  Bitmap( " ONE.ico " );   
  
  
        
private   void  MainTabControl_DrawItem( object  sender, DrawItemEventArgs e)   
        {   
            
try   
            {   
                Rectangle myTabRect 
=   this .MainTabControl.GetTabRect(e.Index);   
  
                
// 先添加TabPage属性      
                e.Graphics.DrawString( this .MainTabControl.TabPages[e.Index].Text   
                , 
this .Font, SystemBrushes.ControlText, myTabRect.X  +   2 , myTabRect.Y  +   2 );   
  
                
// 再画一个矩形框   
                 using  (Pen p  =   new  Pen(Color.White))   
                {   
                    myTabRect.Offset(myTabRect.Width 
-  (CLOSE_SIZE  +   3 ),  2 );   
                    myTabRect.Width 
=  CLOSE_SIZE;   
                    myTabRect.Height 
=  CLOSE_SIZE;   
                    e.Graphics.DrawRectangle(p, myTabRect);   
  
                }   
  
                
// 填充矩形框   
                Color recColor  =  e.State  ==  DrawItemState.Selected  ?  Color.White : Color.White;   
                
using  (Brush b  =   new  SolidBrush(recColor))   
                {   
                    e.Graphics.FillRectangle(b, myTabRect);   
                }   
  
                
// 画关闭符号   
                 using  (Pen objpen  =   new  Pen(Color.Black))   
                {   
                    
// "\"线   
                    Point p1  =   new  Point(myTabRect.X  +   3 , myTabRect.Y  +   3 );   
                    Point p2 
=   new  Point(myTabRect.X  +  myTabRect.Width  -   3 , myTabRect.Y  +  myTabRect.Height  -   3 );   
                    e.Graphics.DrawLine(objpen, p1, p2);   
  
                    
// "/"线   
                    Point p3  =   new  Point(myTabRect.X  +   3 , myTabRect.Y  +  myTabRect.Height  -   3 );   
                    Point p4 
=   new  Point(myTabRect.X  +  myTabRect.Width  -   3 , myTabRect.Y  +   3 );   
                    e.Graphics.DrawLine(objpen, p3, p4);   
                    
/// /=============================================   
                    Bitmap bt  =   new  Bitmap(image);   
                    Point p5 
=   new  Point(myTabRect.X  -   50 4 );   
                    e.Graphics.DrawImage(bt, p5);   
                    
// e.Graphics.DrawString(this.MainTabControl.TabPages[e.Index].Text, this.Font, objpen.Brush, p5);   
                }   
  
  
                
// 绘制小图标                 
                
// ==============================================================================   
                
// Bitmap bt = new Bitmap("E:\\1\\2.jpg");   
                
// Point p5 = new Point(4, 4);   
                 /// /e.Graphics.DrawImage(bt, e.Bounds);   
                 // e.Graphics.DrawImage(bt, p5);   
                
// Pen pt = new Pen(Color.Red);   
                 /// /e.Graphics.DrawString(this.MainTabControl.TabPages[e.Index].Text, this.Font, pt.Brush, e.Bounds);   
                 // e.Graphics.DrawString(this.MainTabControl.TabPages[e.Index].Text, this.Font, pt.Brush, p5);   
  
                e.Graphics.Dispose();   
            }   
            
catch   
            {   
    
            }   
    
        }   
  
        
private   void  MainTabControl_MouseDown( object  sender, MouseEventArgs e)   
        {   
             
if  (e.Button  ==  MouseButtons.Left)   
             {   
                  
int  x  =  e.X, y  =  e.Y;   
  
                
// 计算关闭区域      
                 Rectangle myTabRect  =   this .MainTabControl.GetTabRect( this .MainTabControl.SelectedIndex);   
    
                 myTabRect.Offset(myTabRect.Width 
-  (CLOSE_SIZE  +   3 ),  2 );   
                 myTabRect.Width 
=  CLOSE_SIZE;   
                 myTabRect.Height 
=  CLOSE_SIZE;   
    
                 
// 如果鼠标在区域内就关闭选项卡      
                  bool  isClose  =  x  >  myTabRect.X  &&  x  <  myTabRect.Right   
                  
&&  y  >  myTabRect.Y  &&  y  <  myTabRect.Bottom;   
    
                 
if  (isClose  ==   true )   
                 {   
                     
this .MainTabControl.TabPages.Remove( this .MainTabControl.SelectedTab);   
                 }   
             }   
    
  
        }   
  
         
// 初始化页面   
          private   void  Form1_Load( object  sender, EventArgs e)   
         {   
             
// 清空控件   
             
// this.MainTabControl.TabPages.Clear();   
             
// 绘制的方式OwnerDrawFixed表示由窗体绘制大小也一样   
              this .MainTabControl.DrawMode  =  TabDrawMode.OwnerDrawFixed;   
             
this .MainTabControl.Padding  =   new  System.Drawing.Point(CLOSE_SIZE, CLOSE_SIZE);   
             
this .MainTabControl.DrawItem  +=   new  DrawItemEventHandler( this .MainTabControl_DrawItem);   
             
this .MainTabControl.MouseDown  +=   new  System.Windows.Forms.MouseEventHandler( this .MainTabControl_MouseDown);   
         }   
  
         
// 添加新的tabPage并修改所有tabPage标签上面的图片   
          private   void  button1_Click( object  sender, EventArgs e)   
         {   
             TabPage tabtage 
=   new  TabPage();   
             MainTabControl.TabPages.Add(tabtage);   
             MainTabControl.SelectedTab 
=  tabtage;   
             image 
=   new  Bitmap( " ONE.ico " );   
  
  
         }   
         
// 关闭选中的tabPage   
          private   void  button2_Click( object  sender, EventArgs e)   
         {   
             MainTabControl.TabPages.Remove(MainTabControl.SelectedTab);   
         }   
    }   
}

你可能感兴趣的:(page)