c#控件Tab关闭按钮重新绘制

 

  #region 重绘tab


        const int CLOSE_SIZE = 12;
        private void DrawItem(object sender, DrawItemEventArgs e)
        {


            Rectangle myTabRect = this.tabControl1.GetTabRect(e.Index);

            e.Graphics.DrawString(this.tabControl1.TabPages[e.Index].Text, this.Font, SystemBrushes.ControlText, myTabRect.X + 2, myTabRect.Y + 2);

            using (Pen p = new Pen(SystemColors.Control))
            {
                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.White;

            using (Brush b = new SolidBrush(recColor))
            {
                e.Graphics.FillRectangle(b, myTabRect);
            }


            Color foreColor = e.State == DrawItemState.Selected ? Color.Black : Color.Black;


            using (Pen objpen = new Pen(foreColor))
            {
                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);
            }

        }

        private void MouseDown(object sender, MouseEventArgs e)
        {
            try
            {

                if (e.Button == MouseButtons.Left)
                {
                    int x = e.X, y = e.Y;

                    Rectangle myTabRect = this.tabControl1.GetTabRect(this.tabControl1.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.tabControl1.TabPages.Remove(this.tabControl1.SelectedTab);
                    }
                }
            }
            catch
            { }
        }

        private bool ErgodicModiForm(string MainTabControlKey, TabControl objTabControl)
        {
            foreach (Control con in objTabControl.Controls)
            {
                TabPage tab = (TabPage)con;
                if (tab.Name == MainTabControlKey)
                {
                    tabControl1.SelectedTab = tab;
                    return false;
                }
            }

            return true;
        }



        private void OpenTabForm(Form _frm)
        {
            if (ErgodicModiForm(_frm.Text, tabControl1))
            {
                TabPage tPage = new TabPage(_frm.Text);
                tPage.Name = _frm.Text;
                tabControl1.Controls.Add(tPage);


                tPage.Tag = "Pad.StatusFrm";

                //设置窗体没有边框,加入到选项卡中
                _frm.FormBorderStyle = FormBorderStyle.None;
                _frm.TopLevel = false;
                _frm.Parent = tPage;
                _frm.ControlBox = false;
                _frm.Dock = DockStyle.Fill;

                _frm.Show();


                tabControl1.SelectedTab = tPage;
            }
        }

        /// <summary>
        /// 放在load里面 页面启动时加载
        /// </summary>
        private void ReStart()
        {
            this.tabControl1.TabPages.Clear();                      
            this.tabControl1.DrawMode = TabDrawMode.OwnerDrawFixed;
            this.tabControl1.Padding = new Point(CLOSE_SIZE, CLOSE_SIZE / 2);
            this.tabControl1.DrawItem += new DrawItemEventHandler(this.DrawItem);
            this.tabControl1.MouseDown += new MouseEventHandler(this.MouseDown);
        }
        #endregion

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

糖朝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值