zoukankan      html  css  js  c++  java
  • TabControl添加关闭按钮

     const int CLOSE_SIZE = 4;
              //清空控件
                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.tabControl2_DrawItem);
                
    this.MainTabControl.MouseDown += new System.Windows.Forms.MouseEventHandler(this.tabControl2_MouseDown);

            

     private void tabControl2_DrawItem(object sender, System.Windows.Forms.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.Red))
                    {
                        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.Red : Color.Red;
                    using (Brush b = new SolidBrush(recColor))
                    {
                        e.Graphics.FillRectangle(b, myTabRect);
                    }

                    //画关闭符号
                    using (Pen objpen = new Pen(Color.Red))
                    {
                        //"\"线
                        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);
                    }

                    e.Graphics.Dispose();
                }
                catch (Exception)
                {

                }
            }

            private void tabControl2_MouseDown(object sender, System.Windows.Forms.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);
                    }
                }
            }

    作者:观海看云个人开发历程知识库 - 博客园
    出处:http://www.cnblogs.com/zhangtao/
    文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    [算法] 堆栈
    [刷题] PTA 02-线性结构3 Reversing Linked List
    java IO流 (八) RandomAccessFile的使用
    java IO流 (七) 对象流的使用
    java IO流 (六) 其它的流的使用
    java IO流 (五) 转换流的使用 以及编码集
    java IO流 (四) 缓冲流的使用
    java IO流 (三) 节点流(或文件流)
    java IO流 (二) IO流概述
    java IO流 (一) File类的使用
  • 原文地址:https://www.cnblogs.com/zhangtao/p/1672956.html
Copyright © 2011-2022 走看看