C#自定义控件指示灯效果
C#用户控件之指示灯
在体现通讯状态、运行状态等用一个靓眼的指示灯如何做?
思路(GDI)
- 外环用笔绘制(Pen),内圆用画刷(SolidBrush);
两个方法(用笔画圆,用画刷填充圆的内部):
- 绘制边界RectangleF定义的椭圆/圆
DrawEllipse(Pen pen,RectangleF rect)
- 填充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(); } }
//颜色(Color)——备注:写5种颜色属性(灰色=Gray、棕色=DarkGoldenrod、红色=Red、蓝色=Blue、绿色=limeGreen<比Green好看些>) private Color zcolor1 = Color.Gray; //灰色.......写5种 [Browsable(true)] [Category("布局_G")] [Description("颜色1")] public Color ZColor1 { get { return zcolor1; } set { zcolor1 = value; this.Invalidate(); } } //当前颜色获取(定义一个私有方法)(Int) private Color GetCurColor() { List<Color> colors = new List<Color>(); colors.Add(zcolor1); colors.Add(zcolor2); colors.Add(zcolor3); colors.Add(zcolor4); colors.Add(zcolor5); return colors[curValue]; } //间隙(float),属性都是一个样往下敲就是 注意:间隙设置值的范围(外环间隙要小于内圆间隙)
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方法中定义变量更替
【1】只内圆闪烁(定义内圆画刷颜色Transparent<透明色>、GetCurColor<当前色>两种画刷)
if (this.flickerAct == true) { if (this.blink == true) //将blink标志位在定时器的Tick方法中取反 (blink=!blink) { sb = new SolidBrush(zcolor6); //zcolor6为透明色 } else { sb = new SolidBrush(getCurColor); //getCurColor为当前色 } } else { sb = new SolidBrush(getCurColor); //不闪烁就定义当前色画刷 } rec = new RectangleF(gapIn, gapIn, this.width - 2 * this.gapIn, this.height - 2 * gapIn); g.FillEllipse(sb, rec);
private void MyTimer_Tick(object sender, EventArgs e) //定时器Tick事件方法 { if (this.flickerVis == true) { //显隐控件 this.Visible=!this.Visible; //整体闪烁只定义Visible即可 this.blink=false; } else { //内圆闪烁标志 this.blink = !this.blink; } this.Invalidate(); }
private bool flickerAct = false; [Browsable(true)] [Category("布局_G")] [Description("是否闪烁")] public bool FlickerAct { get { return flickerAct; } set { if (value == true) { myTimer.Interval = this.flickerFre; //传递给定时器Interval 一个int(毫秒刷新率)值即可 this.myTimer.Start(); //闪烁定时器开始 } else { this.myTimer.Stop(); //不闪烁定时器停止;同时将标志位、显示置为默认值 this.blink = false; this.Visible = true; } flickerAct = value; this.Invalidate(); } }
闪瞎双眼,捂脸
想要二进制使用示例
上一篇:C# System.Linq提供类似SQL语法的高效查询操作
栏 目:C#教程
本文标题:C#自定义控件指示灯效果
本文地址:https://fushidao.cc/ruanjianbiancheng/1286.html
您可能感兴趣的文章
- 11-29C# 中的委托与事件机制详解
- 11-29C#中基数排序算法的原理及实现
- 11-29C#中计数排序算法的原理及实现
- 11-29C#实现线性搜索算法
- 11-29C#实现希尔排序算法的实践
- 11-29C#实现桶排序算法的示例代码
- 11-29C#实现广度优先搜索的实例代码
- 11-29C#中实现深度优先搜索
- 11-29C# 变量作用域常用说明小结
- 11-29详解C#中有趣的 SourceGenerator生成器


阅读排行
推荐教程
- 11-29C#解决Excel边框样式无法复制及格式刷功能
- 11-29C#自定义控件指示灯效果
- 11-29C#中计数排序算法的原理及实现
- 11-29C#实现线性搜索算法
- 11-29C#删除Word文档中的段落的方法示例
- 11-29C#中基数排序算法的原理及实现
- 11-29C# System.Linq提供类似SQL语法的高效查询操作
- 11-29C# WPF中实现图表生成的五种方式
- 11-29C#利用ms office实现office转pdf的示例代码
- 11-29C#实现身份证实名认证接口的示例代码