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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C#中,可以使用AutoCAD的COM组件或者开源的DXF解析库来读取和处理DXF文件,并使用.NET GDI+图形库在控件上面绘制。 以下是一个使用DXFSharp库读取和显示DXF文件的示例代码: ``` using System.Drawing; using System.Windows.Forms; using DXFSharp; class DXFViewer : Control { private DXFDocument dxf; public DXFViewer() { // 读取DXF文件 dxf = DXFDocument.Load("example.dxf"); } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); Graphics g = e.Graphics; // 设置绘图参数 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; // 绘制实体 foreach (DXFEntity entity in dxf.Entities) { if (entity is DXFPolyline) { DXFPolyline polyline = (DXFPolyline) entity; PointF[] points = polyline.Vertices.Select(v => new PointF((float) v.X, (float) v.Y)).ToArray(); g.DrawLines(Pens.Black, points); } else if (entity is DXFCircle) { DXFCircle circle = (DXFCircle) entity; float x = (float) circle.Center.X - (float) circle.Radius; float y = (float) circle.Center.Y - (float) circle.Radius; float diameter = (float) circle.Radius * 2; g.DrawEllipse(Pens.Black, x, y, diameter, diameter); } else if (entity is DXFArc) { DXFArc arc = (DXFArc) entity; float x = (float) arc.Center.X - (float) arc.Radius; float y = (float) arc.Center.Y - (float) arc.Radius; float diameter = (float) arc.Radius * 2; float startAngle = (float) (arc.StartAngle / Math.PI * 180); float sweepAngle = (float) (arc.SweepAngle / Math.PI * 180); g.DrawArc(Pens.Black, x, y, diameter, diameter, startAngle, sweepAngle); } } } } ``` 以上代码演示了如何读取DXF文件并使用.NET GDI+图形库在控件上面绘制DXF文件中的实体。您可以根据需要进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

糖朝

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

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

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

打赏作者

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

抵扣说明:

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

余额充值