winform 自定义控件之信号灯

创建自定义控件

创建一个继承自 Panel 的自定义控件是更优雅、复用性更强的方案。你可以将其编译到类库中,然后在多个项目中像使用标准控件一样使用它。

步骤与代码

1.创建自定义控件类:

在项目中添加一个新的类文件,例如 SignalLight.cs。

public class SignalLight : Panel
    {
        // 默认为红色
        private Color _lightColor = Color.Red;
        public Color LightColor
        {
            get { return _lightColor; }
            set
            {
                _lightColor = value;
                this.Invalidate(); // 颜色改变时重绘控件
            }
        }

        public SignalLight()
        {
            // 双缓冲和调整大小时重绘,可以减少闪烁
            this.DoubleBuffered = true;
            this.SetStyle(ControlStyles.ResizeRedraw, true);
        }

        // 重写OnPaint方法进行绘制
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e); // 可选,是否先绘制基类背景

            e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;

            // 使用当前设置的LightColor进行绘制
            using (Brush lightBrush = new SolidBrush(LightColor))
            {
                e.Graphics.FillEllipse(lightBrush, this.ClientRectangle);
            }
        }

        // 可选但重要:重写OnResize确保圆形随控件大小正确调整
        protected override void OnResize(System.EventArgs e)
        {
            base.OnResize(e);
            // 将控件的Region设置为圆形区域,实现真正的圆形而不仅是绘制外观
            using (GraphicsPath path = new GraphicsPath())
            {
                path.AddEllipse(this.ClientRectangle);
                this.Region = new Region(path);
            }
        }
    }

2.使用自定义控件:

重新生成项目后,在工具箱中会出现 SignalLight 控件。
将其拖拽到窗体上,就可以像普通 Panel 一样使用,并通过属性窗口设置 LightColor。

说明:
OnResize 方法的作用:FillEllipse 只是在矩形区域内画一个圆形的图案,控件本身的边界仍然是矩形的。通过重写 OnResize,我们将控件的可见区域(Region)设置为一个圆形路径。这样,控件就变成了一个真正的圆形,其周围的区域(四个角)将无法点击且透明。
将 LightColor 属性设置为 public 并触发 Invalidate(),允许你在设计时或运行时轻松更改指示灯的颜色

3.总结

在这里插入图片描述
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值