主页
手机版
扫描查看手机站
所在位置:首页 → 教程资讯 → 使用C#创建自定义指示灯用户控件

使用C#创建自定义指示灯用户控件

发布: 更新时间:2024-09-06 09:59:34

在C#中,我们可以通过创建自定义用户控件来实现一个漂亮的指示灯,用于反映通讯状态、运行状态等。下面我们将介绍如何使用GDI绘图技术来实现这一功能。


思路(GDI)

  • 外环使用笔(Pen)绘制,内圆使用画刷(SolidBrush)填充。


两个方法

  1. 使用笔绘制边界RectangleF定义的椭圆/圆:

    DrawEllipse(Pen pen, RectangleF rect)
  2. 使用画刷填充RectangleF定义的边框椭圆的内部:

    FillEllipse(Brush brush, RectangleF rect)


定义属性

  • 指示灯颜色、外环与边界的间隙、内圆与边界的间隙、外环宽度、当前颜色
//外环宽度
private float outWidth = 4.0f;
[Browsable(true)]
[Category("布局_G")]
[Description("外环的宽度")]
public float OutWidth
{
    get { return outWidth; }
    set
    {
         if (value <=0||value<0.1*this.Width ) return;
        outWidth = value; this.Invalidate();
    }
}


GDI绘制图形:(外环、内圆)

Color getCurColor = GetCurColor();  //获取当前颜色

//绘制外环(DrawEllipse-用笔画椭圆)
p = new Pen(getCurColor, outWidth);
RectangleF rec = new RectangleF(this.gapOut, this.gapOut, this.width - 2 * this.gapOut, this.height - 2 * gapOut);
g.DrawEllipse(p, rec);

//绘制内圆(FillEllipse-填充椭圆内部)
sb = new SolidBrush(getCurColor);
rec = new RectangleF(gapIn, gapIn, this.width - 2 * this.gapIn, this.height - 2 * gapIn);
g.FillEllipse(sb, rec);


最后生成

通过闪烁功能,可以使指示灯的状态更加直观友好。



两种闪烁方法

关键在于使用定时器(timer)来实现闪烁效果,在定时器的Tick方法中定义变量更替。



闪瞎双眼,捂脸



想要二进制使用示例

  private void led1_Load(object sender, EventArgs e)
  {
      bool b = false;
      //三元运算定义两种颜色即可
      this.led1.CurValue = b ? 2 : 3; 
  }

结束

软件上新 查看更多