C#自定义控件-可选择类型的按钮(取反式,点击式,延时式)

要做一个自定义控件,效果是:可以选择三种不同的类型的按钮,并各自实现功能

三种按钮通过枚举类型

  1. 取反式
    功能:点击置位,再次点击复位
    思路:利用click事件,标志位取反来实现

  2. 点击式
    功能:点击置位,松开复位
    思路:挂载鼠标按下,鼠标松开事件

  3. 延时式
    功能:当到达预设时间后才可置位,松开复位
    思路:定义一个刷新计数countTime,通过countTime >= 设定的延时时间(ms) / 定时器刷新时间, 即到达延时时间,触发,也是鼠标按下,松开事件

1.枚举三种按钮

    public enum ButtonType
    {
   
        ClickButton,
        HoldButton,
        DelayButton
    }

2.添加三种按钮有的属性

延时式按钮的延时触发时间

		private int delayTime = 1000;
        [Category("Customer"), Description("指定的延时触发时间(毫秒)")]
        public int DelayTime
        {
   
            get {
    return delayTime; }
            set {
    delayTime = value; }
        }

按钮按下设置

        private bool _isClick;
        public bool IsClick {
   }

按钮按下,弹起时的背景颜色

        private Color _trueColor;
        public Color TrueColor{
   }
       
        private Color _falseColor;
        public Color FalseColor{
   }

按钮内部文本

        private string _content;
        public string Content{
   }

按钮边框设置

		//边框宽度
        private int _borderWidth;
        public int BorderWidth{
   }
        //边框颜色
        private Color _borderColor;
        public Color BorderColor{
   }
		//边框圆角半径
        private int _cornerRadius;
        private int CornerRadius{
   }

3.绘制按钮

using System.Drawing;
using System.Drawing.Drawing2D;
using XCore.Controls.Unity;

        protected override void OnPaint(PaintEventArgs e)
        {
   
            base.OnPaint(e);

            var g = e.Graphics;
            g.CompositingQuality = CompositingQuality.HighQuality;
            g.SmoothingMode = SmoothingMode.HighQuality;

            // 生成背景色
            g.FillPath(new SolidBrush(_isClick ? _trueColor : _falseColor),
                UiHelper.RoundRectangle(0, 0, Width, Height, _cornerRadius));

            // 生成边框颜色
            g.DrawPath(new Pen(new SolidBrush(_borderColor), _borderWidth),
                UiHelper.RoundRectangle(0, 0, Width - _borderWidth, Height - _borderWidth, _cornerRadius));

            // 生成文字
            var sizeF = g.MeasureString(_content, Font);
            g.DrawString(_content, Font, new SolidBrush(ForeColor), (Width - sizeF.Width) / 2, (Height - sizeF.Height) / 2);
        }

4.添加定时器

		//全局定时器
        public Timer timer;
		//定义刷新计数
        private int countTime;

        public ChooseButtom()
        {
   
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值