发布: 更新时间:2024-09-06 09:59:34
在C#中,我们可以通过创建自定义用户控件来实现一个漂亮的指示灯,用于反映通讯状态、运行状态等。下面我们将介绍如何使用GDI绘图技术来实现这一功能。
思路(GDI)
两个方法
DrawEllipse(Pen pen, RectangleF rect)
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;
}