zoukankan      html  css  js  c++  java
  • 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 - 504);   
                        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);   
             }   
        }   
    }
  • 相关阅读:
    我在博客园的第一篇博客
    第5次作业--对象的创建与使用
    20194622 JAVA--static、this、包总结--求阶乘
    蔡奇宏软件工程第二次作业--四则运算
    蔡奇宏软件工程第一次作业
    JAVA NIO工作原理及代码示例
    Java实现八大排序算法
    union和union all的区别
    .NET MVC model数据验证
    解决VS 2015模版中找不到ADO.NET Entity Data Model的方法
  • 原文地址:https://www.cnblogs.com/bingyun84/p/1931148.html
Copyright © 2011-2022 走看看