C# GDI绘制控件,基类控件(1)

 勇哥注:

所谓的基类控件,就是不从其它控件继承的,而是继承UserControl的控件。


控件外观如下:

image.png

此控件有如下5个属性:

image.png


有关用户控件,下面这篇文章讲得很清楚:

https://blog.csdn.net/sl1990129/article/details/78959264




源码:

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

namespace GDI基类控件1
{

    public enum ContentAlign
    {
        Left,Center,Right
    }

    internal class MyButton:UserControl
    {
        public MyButton()
        {

        }

        private Color backColor=Color.FromArgb(15,93,244);
        //生成代码的时候生成到设计器代码里去
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        [Description("背景颜色"),Category("自定义"),Browsable(true)]
        public Color BackColor
        {
            get { return backColor; }
            set
            {
                backColor = value;
                this.Refresh();
            }
        }

        private Color borderColor=Color.FromArgb(14,43,94);
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        [Description("边框颜色"), Category("自定义"), Browsable(true)]
        public Color BorderColor
        {
            get { return borderColor; }
            set
            {
                borderColor = value;
                this.Refresh();
            }
        }


        private int borderWidth;
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        [Description("边框宽度"), Category("自定义"), Browsable(true)]
        public int BorderWidth
        {
            get { return borderWidth; }
            set
            {
                borderWidth = value;
                this.Refresh();
            }
        }


        private string content;
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        [Description("内容"), Category("自定义"), Browsable(true)]
        public string Content
        {
            get { return content; }
            set
            {
                content = value;
                this.Refresh();
            }
        }

        private ContentAlign contentAlign= ContentAlign.Center;
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        [Description("内容布局方向"), Category("自定义"), Browsable(true)]
        public ContentAlign ContentAlign
        {
            get { return contentAlign; }
            set {
                contentAlign = value;
                this.Refresh();
            }
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            //基类控件首先要加入一个矩形,代表当前控件的大小
            GraphicsPath gPath = new GraphicsPath();
            gPath.AddRectangle(this.ClientRectangle);
            e.Graphics.FillPath(new SolidBrush(BackColor), gPath);
            if(borderWidth>0)
            {
                //-1的问题是微软控件像素的问题,奇数时会出现问题 偶数不会
                if(borderWidth%2!=0)
                {
                    Rectangle rec = this.ClientRectangle;
                    rec.Width -= 1;
                    rec.Height -= 1;
                    gPath.AddRectangle(rec);
                }
                e.Graphics.DrawPath(new Pen(borderColor, borderWidth), gPath);
            }

            if(!string.IsNullOrEmpty(content))
            {
                //计算文字大小
                SizeF s = e.Graphics.MeasureString(content, this.Font);
                SolidBrush sBrush = new SolidBrush(this.ForeColor);
                switch(contentAlign)
                {
                    case ContentAlign.Left:
                        e.Graphics.DrawString(content, this.Font, sBrush, this.Padding.Left, (this.Height - s.Height) / 2);
                        break;
                    case ContentAlign.Center:
                        e.Graphics.DrawString(content, this.Font, sBrush, (this.Width - s.Width) / 2, (this.Height - s.Height) / 2);
                        break;
                    case ContentAlign.Right:
                        e.Graphics.DrawString(content, this.Font, sBrush, this.Width - s.Width-this.Padding.Right, (this.Height - s.Height) / 2);
                        break;
                    default:
                        break;
                }
            }

            base.OnPaint(e);

        }

    }
}




本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:
本帖最后由 勇哥,很想停止 于 2023-05-23 22:58:01 编辑

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年5月    »
12345
6789101112
13141516171819
20212223242526
2728293031
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864