WinForm 指示灯
WinForm 指示灯
参考:newideas07的博文 ovalshape C# 真正纯WinForm打造指示灯
今天一个WinForm项目需要使用到指示灯,由于没在控件属性的找到圆角设置。原本打算直接切两个图在PictureBox中显示。后来在网上找到 newideas07的博文 ovalshape C# 真正纯WinForm打造指示灯 ,因此根据该博文制作一个指示灯控件,以下为过程及代码。
1、新建自定义指示灯控件
在项目相应文件夹中 右键-添加-用户控件,输入名称:Lamp,点击确定。
2、设置属性和事件
设置控件大小为(50,50,设置控件绘制时事件 Lamp_Paint;
3、相关代码
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
using MyControl.Datas.Enum;namespace MyControl.Part
{public partial class Lamp:UserControl{//=================== construct function ================== #region construct 指示灯构造/// <summary>/// 指示灯构造/// </summary>public Lamp(){this.InitializeComponent();}#endregion//=================== private fields ======================#region fields private Status m_status;private Color m_centerColor = Color.White;private Color m_surroundColor = Color.Green;#endregion//=================== public properties ===================#region status 状态/// <summary>/// 状态/// </summary>public Status Status{get => this.m_status;set{this.m_status = value;this.SetStatus(value);}}#endregion//=================== event metod =========================#region OnPaint 绘制时控制边界圆角/// <summary>/// 绘制时控制边界圆角/// </summary>/// <param name="pevent"></param>protected override void OnPaint(PaintEventArgs pevent){//使控件边界也为圆形var graphics = new GraphicsPath();graphics.AddEllipse(0,0,this.Width,this.Height);this.Region = new System.Drawing.Region(graphics);base.OnPaint(pevent);}#endregion#region Lamp_Paint 绘图时呈现中心颜色方式到指定颜色渐变效果/// <summary>/// 绘图时呈现中心颜色方式到指定颜色渐变效果/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void Lamp_Paint(object sender,PaintEventArgs e){//重绘时 画出中心放射颜色的圆形var path = new GraphicsPath();path.AddEllipse(0,0,this.Size.Width,this.Size.Height);var pthGrBrush = new PathGradientBrush(path){CenterColor = m_centerColor};Color[] colors = { this.m_surroundColor };pthGrBrush.SurroundColors = colors;e.Graphics.FillEllipse(pthGrBrush,0,0,this.Size.Width,this.Size.Height);}#endregion//=================== public metod ========================//=================== private metod =======================#region SetStatus 设置状态/// <summary>/// 设置状态/// </summary>/// <param name="status"></param>private void SetStatus(Status status){switch (this.Status){case Status.OK:case Status.Open:this.m_centerColor = Color.White;this.m_surroundColor = Color.Green;break;case Status.EX:case Status.ERR:this.m_centerColor = Color.White;this.m_surroundColor = Color.Red;break;case Status.Stop:this.m_centerColor = Color.White;this.m_surroundColor = Color.Yellow;break;case Status.None:case Status.Close:default:this.m_centerColor = Color.FromArgb(255,249,249,249);//Color.White;this.m_surroundColor = Color.Gray;break;}this.Refresh();//刷新控件}#endregion}
}
枚举类 Enumeration
namespace MyControl.Datas.Enum
{#region Status 状态/// <summary>/// 状态/// </summary>public enum Status{#region None 无/// <summary>/// 无/// </summary>None,#endregion#region OK 正常/// <summary>/// 正常/// </summary>OK,#endregion#region EX 异常/// <summary>/// 异常/// </summary>EX,#endregion#region ERR 错误/// <summary>/// 错误/// </summary>ERR,#endregion#region Open 开启/// <summary>/// 开启/// </summary>Open,#endregion#region Close 关闭/// <summary>/// 开启/// </summary>Close,#endregion#region Stop 暂停/// <summary>/// 开启/// </summary>Stop,#endregion }#endregion
}
调用效果
项目生成后,在设计页面,可以直接在【工具箱】找到自定义控件【Lamp】,与【公共控件】一样,
用拖来进设计页面即可。
或者使用代码添加
this.lamp1 = new MyControl.Part.Lamp();this.lamp1.Location = new System.Drawing.Point(1, 1);this.lamp1.Name = "lamp1";this.lamp1.Size = new System.Drawing.Size(50, 50);this.lamp1.Status = MyControl.Datas.Enum.Status.None;this.Panel1.Controls.Add(this.lamp1);
效果图
参考:newideas07的博文 ovalshape C# 真正纯WinForm打造指示灯
WinForm 指示灯相关推荐
- Winform指示灯
创建线程控制label图形.字符串颜色,然后在显隐控制 Thread thread; public Form() {InitializeComponent();label1.Text = " ...
- Winform自定义控件 —— 指示灯
在开始阅读本文之前,如果您有学习创建自定义控件库并在其他项目中引用的需求,请参考:在Visual Studio中创建自定义Winform控件库并在其他解决方案中引用https://blog.csdn. ...
- Log4Net的控制台,WinForm,WebApplication使用
一.Log4Net的控制台,WinForm,WebApplication使用 1.首先使用nuget 添加log4Net 到控制台项目中 log4j每个符号的具体含义:%d %5p %c{1}:%L ...
- C#中Winform程序中如何实现多维表头【不通过第三方报表程序】
问题:C#中Winform程序中如何实现多维表头. 在网上搜了很多方法,大多数方法对于我这种新手,看的都不是很懂.最后在新浪博客看到了一篇比较易懂的文章:[DataGridView二维表头与合并单元格 ...
- C#WinForm的线程及Invoke应用(转)
C#多线程异步访问winform中控件 http://zwkufo.blog.163.com/blog/static/25882512009111453957552/?fromdm&fromS ...
- (转)WinForm控件使用文章收藏整理完成
http://home.cnblogs.com/group/topic/29829.html 对C# WinForm开发系列收集的控件使用方面进行整理, 加入了一些文章, 不断补充充实, 完善这方面. ...
- FastReport.net 使用 Winform WebForm打印
delphi用的fastreport比较多 所以.net中也研究一下用法,这个打印控件还是很简单的 只要手动设计一下写少许代码就可以打印了 甚至可以写成通用代码 以后就可以不用写代码 安装demo会同 ...
- WinForm绘制带有升序、降序的柱形图
WinForm绘制带有升序.降序的柱形图 private void HuiZhiTu( string strPaiXu){//初始数据int[] nums = { 150, 89, 200, 60, ...
- 一个winform带你玩转rabbitMQ
源码已放出 https://github.com/dubing/MaoyaRabbit 本章分3部分 一.安装部署初探 二.进阶 三.api相关 安装 部署 初探 先上图 一. 安装部署 下载 rab ...
最新文章
- 1047.删除字符串中的相邻重复项
- .NET Core微服务之基于Ocelot+IdentityServer实现统一验证与授权
- python中国大学排名爬虫写明详细步骤-Python之爬虫-中国大学排名
- [OS复习]操作系统综述2
- DVRRDK, EZSDK和DVSDK这三者有什么区别
- HMAC-SHA1加密
- 字体对话框java实验_Java Web安全 || Java基础 sun.misc.Unsafe
- java allocate_Java中volatile关键字的最全总结
- python cv.imread_Python的OpenCV cv2.imread总是返回None而cvFeatDetector崩溃了python
- java nio 连接数_Java NIO 基础一 NIO概念
- MATLAB 画图 x轴换成 字符串
- iOS OC和Swift相互引用,测试在swift项目
- J2ME模拟器加载RMS时突然失效的原因
- 【微弱瞬态信号检测】混沌背景下微弱瞬态信号的SVM检测方法的matlab仿真
- 知名建筑景观3D可视化渲染软件lumion10.5
- An动画基础之元件的影片剪辑效果
- Spring Boot 2.x 基础案例:整合Dubbo 2.7.3 Nacos1.1.3(配置中心)
- 计算机网络软件系统不包括,1period;计算机软件系统一般分为lpar; A rpar;两大部分...
- 秋名山老司机从上车到翻车的悲痛经历,带你深刻了解什么是Spark on Hive!
- python程序设计搜题软件下载_智慧职教APPPython程序设计答案搜题公众号