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 指示灯相关推荐

  1. Winform指示灯

    创建线程控制label图形.字符串颜色,然后在显隐控制 Thread thread; public Form() {InitializeComponent();label1.Text = " ...

  2. Winform自定义控件 —— 指示灯

    在开始阅读本文之前,如果您有学习创建自定义控件库并在其他项目中引用的需求,请参考:在Visual Studio中创建自定义Winform控件库并在其他解决方案中引用https://blog.csdn. ...

  3. Log4Net的控制台,WinForm,WebApplication使用

    一.Log4Net的控制台,WinForm,WebApplication使用 1.首先使用nuget 添加log4Net 到控制台项目中 log4j每个符号的具体含义:%d %5p %c{1}:%L ...

  4. C#中Winform程序中如何实现多维表头【不通过第三方报表程序】

    问题:C#中Winform程序中如何实现多维表头. 在网上搜了很多方法,大多数方法对于我这种新手,看的都不是很懂.最后在新浪博客看到了一篇比较易懂的文章:[DataGridView二维表头与合并单元格 ...

  5. C#WinForm的线程及Invoke应用(转)

    C#多线程异步访问winform中控件 http://zwkufo.blog.163.com/blog/static/25882512009111453957552/?fromdm&fromS ...

  6. (转)WinForm控件使用文章收藏整理完成

    http://home.cnblogs.com/group/topic/29829.html 对C# WinForm开发系列收集的控件使用方面进行整理, 加入了一些文章, 不断补充充实, 完善这方面. ...

  7. FastReport.net 使用 Winform WebForm打印

    delphi用的fastreport比较多 所以.net中也研究一下用法,这个打印控件还是很简单的 只要手动设计一下写少许代码就可以打印了 甚至可以写成通用代码 以后就可以不用写代码 安装demo会同 ...

  8. WinForm绘制带有升序、降序的柱形图

    WinForm绘制带有升序.降序的柱形图 private void HuiZhiTu( string strPaiXu){//初始数据int[] nums = { 150, 89, 200, 60, ...

  9. 一个winform带你玩转rabbitMQ

    源码已放出 https://github.com/dubing/MaoyaRabbit 本章分3部分 一.安装部署初探 二.进阶 三.api相关 安装 部署 初探 先上图 一. 安装部署 下载 rab ...

最新文章

  1. 1047.删除字符串中的相邻重复项
  2. .NET Core微服务之基于Ocelot+IdentityServer实现统一验证与授权
  3. python中国大学排名爬虫写明详细步骤-Python之爬虫-中国大学排名
  4. [OS复习]操作系统综述2
  5. DVRRDK, EZSDK和DVSDK这三者有什么区别
  6. HMAC-SHA1加密
  7. 字体对话框java实验_Java Web安全 || Java基础 sun.misc.Unsafe
  8. java allocate_Java中volatile关键字的最全总结
  9. python cv.imread_Python的OpenCV cv2.imread总是返回None而cvFeatDetector崩溃了python
  10. java nio 连接数_Java NIO 基础一 NIO概念
  11. MATLAB 画图 x轴换成 字符串
  12. iOS OC和Swift相互引用,测试在swift项目
  13. J2ME模拟器加载RMS时突然失效的原因
  14. 【微弱瞬态信号检测】混沌背景下微弱瞬态信号的SVM检测方法的matlab仿真
  15. 知名建筑景观3D可视化渲染软件lumion10.5
  16. An动画基础之元件的影片剪辑效果
  17. Spring Boot 2.x 基础案例:整合Dubbo 2.7.3 Nacos1.1.3(配置中心)
  18. 计算机网络软件系统不包括,1period;计算机软件系统一般分为lpar; A rpar;两大部分...
  19. 秋名山老司机从上车到翻车的悲痛经历,带你深刻了解什么是Spark on Hive!
  20. python程序设计搜题软件下载_智慧职教APPPython程序设计答案搜题公众号

热门文章

  1. nyoj-56-阶乘因式分解(一)
  2. Spring Boot基础入门+内置tomcat+自动配置浅谈分析
  3. DataFrame数据预处理:修改指定列的数据类型
  4. Kindeditor.NET 实现多图上传保存
  5. 复选框如何实现单选框效果
  6. 显卡测试(具体步骤)
  7. 【英语六级】【仔细阅读】(3)
  8. NC发布webservice接口
  9. APS的主要功能有哪些?你了解吗?
  10. 编程实现多边形的平移、比例(缩放)、旋转、对称和错切等二维仿射变换(大有门道)