winform设置TabControl带删除键

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace dongnan.MyControl
{
    public partial class KDelTabControl : TabControl
    {
        const int CLOSE_SIZE = 15;
        //tabPage标签图片
        //Bitmap image = new Bitmap(@"C:\Users\admin\Desktop\下载 (1).jpg");

        public KDelTabControl()
        {
            //InitializeComponent();

            this.Padding = new Point(12, 3);

            //DrawMode:指定用户还是系统来绘制标题
            this.DrawMode = TabDrawMode.OwnerDrawFixed;
            //this.Padding = new System.Drawing.Point(CLOSE_SIZE, CLOSE_SIZE);
            this.DrawItem += new DrawItemEventHandler(this.KDelTabControl_DrawItem);
            this.MouseDown += new MouseEventHandler(this.KDelTabControl_MouseDown);
        }

        //绘制“X”号即关闭按钮
        private void KDelTabControl_DrawItem(object sender, DrawItemEventArgs e)
        {
            try
            {
                Rectangle tab = this.GetTabRect(e.Index);

                //先添加TabPage属性  
                e.Graphics.DrawString(this.TabPages[e.Index].Text, this.Font, SystemBrushes.ControlText, tab.X + 2, tab.Y + 2);
                //再画一个矩形框
                using (Pen p = new Pen(Color.White))
                {
                    tab.Offset(tab.Width - (CLOSE_SIZE + 3), 2);
                    tab.Width = CLOSE_SIZE;
                    tab.Height = CLOSE_SIZE;
                    e.Graphics.DrawRectangle(p, tab);
                }
                //填充矩形框
                Color recColor = e.State == DrawItemState.Selected ? Color.Gray : Color.White;
                using (Brush b = new SolidBrush(recColor))
                {
                    e.Graphics.FillRectangle(b, tab);
                }
                //画关闭符号
                using (Pen objpen = new Pen(Color.Black))
                {
                    ////=============================================
                    //自己画X
                    //"\"线
                    Point p1 = new Point(tab.X + 3, tab.Y + 3);
                    Point p2 = new Point(tab.X + tab.Width - 3, tab.Y + tab.Height - 3);
                    e.Graphics.DrawLine(objpen, p1, p2);
                    //"/"线
                    Point p3 = new Point(tab.X + 3, tab.Y + tab.Height - 3);
                    Point p4 = new Point(tab.X + tab.Width - 3, tab.Y + 3);
                    e.Graphics.DrawLine(objpen, p3, p4);

                    ////=============================================
                    //使用图片
                    //Bitmap bt = new Bitmap(image);
                    //Point p5 = new Point(tab.X, 4);
                    //e.Graphics.DrawImage(bt, p5);



                    //e.Graphics.DrawString(this.MainTabControl.TabPages[e.Index].Text, this.Font, objpen.Brush, p5);
                }
                e.Graphics.Dispose();
            }
            catch (Exception)
            { }
        }

        private void KDelTabControl_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                int x = e.X, y = e.Y;
                //计算关闭区域  
                Rectangle tab = this.GetTabRect(this.SelectedIndex);
                tab.Offset(tab.Width - (CLOSE_SIZE + 3), 2);
                tab.Width = CLOSE_SIZE;
                tab.Height = CLOSE_SIZE;
                //如果鼠标在区域内就关闭选项卡  
                bool isClose = x > tab.X && x < tab.Right && y > tab.Y && y < tab.Bottom;

                if (isClose == true) this.TabPages.Remove(this.SelectedTab);
            }
        }

    }
}

 

上一篇:activiti整合踩坑1:ERROR o.a.e.i.i.CommandContext - [close,171] - Error while closing command context jav


下一篇:GBase 8a部分V95版本升级时需要gcware.flush_statemachine强行刷快照的操作