# DotNetIndustrialControls
**Repository Path**: smallcore/dot-net-industrial-controls
## Basic Information
- **Project Name**: DotNetIndustrialControls
- **Description**: C# 实现工业级指示灯控件
- **Primary Language**: C#
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 1
- **Created**: 2026-01-15
- **Last Updated**: 2026-01-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: 自定义控件, 工控指示灯, 工业控件
## README
>声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!
## 前言
工业控制领域,指示灯是用于显示设备状态的重要元素。为了提升用户体验并满足多样化的需求,本文介绍了一种基于自定义`UserControl`实现的工控指示灯控件——`IndustrialLed`。
该控件不仅支持多种状态切换、颜色自定义,还提供了可选的闪烁效果,适用于不同的工控场景。
## 工控指示灯的核心思路
工控指示灯的设计核心在于圆形显示、状态对应颜色以及可选的闪烁效果。
通过创建一个自定义的`UserControl`,我们实现了高度的复用性,允许根据需求定制状态、颜色、大小及是否启用闪烁效果。
## 完整代码
### 自定义工控指示灯控件(IndustrialLed.cs)
```cs
using System;
using System.Drawing;
using System.Windows.Forms;
using System.ComponentModel;
namespace IndustrialControls
{
///
/// 自定义工控指示灯控件
/// 支持多状态切换、颜色自定义、闪烁效果
///
public partial class IndustrialLed : UserControl
{
#region 私有方法
///
/// 更新闪烁定时器状态
///
private void UpdateFlashTimer()
{
if (_enableFlash && (_currentStatus == LedStatus.Fault || _currentStatus == LedStatus.Warning))
{
_flashTimer.Interval = FlashInterval;
_flashTimer.Start();
}
else
{
_flashTimer.Stop();
_isFlashVisible = true; // 停止闪烁时恢复显示
Invalidate();
}
}
///
/// 闪烁定时器触发事件
///
private void FlashTimer_Tick(object sender, EventArgs e)
{
_isFlashVisible = !_isFlashVisible;
Invalidate(); // 重绘控件实现闪烁
}
///
/// 根据当前状态获取对应颜色
///
private Color GetCurrentColor()
{
return _currentStatus switch
{
LedStatus.Running => _runningColor,
LedStatus.Fault => _faultColor,
LedStatus.Warning => _warningColor,
LedStatus.Standby => _standbyColor,
_ => _standbyColor
};
}
#endregion
}
}
```
### 控件使用方法
1、添加控件到窗体:编译上述代码,在 Visual Studio 的"工具箱"中会自动出现`IndustrialLed`控件。拖拽此控件至 WinForms 窗体上,并调整其大小。
2、代码控制指示灯状态:通过简单的代码即可轻松控制指示灯的状态和属性,如:
```cs
using System;
using System.Windows.Forms;
using IndustrialControls;
namespace IndustrialLedDemo
{
public partial class FrmMain : Form
{
public FrmMain()
{
InitializeComponent();
}
// 示例:切换到运行状态
private void btnRunning_Click(object sender, EventArgs e)
{
industrialLed1.CurrentStatus = IndustrialLed.LedStatus.Running;
industrialLed1.EnableFlash = false; // 运行状态不闪烁
}
// 示例:切换到故障状态(启用闪烁)
private void btnFault_Click(object sender, EventArgs e)
{
industrialLed1.CurrentStatus = IndustrialLed.LedStatus.Fault;
industrialLed1.EnableFlash = true; // 故障状态启用闪烁
industrialLed1.FlashInterval = 300; // 自定义闪烁间隔300ms
}
// 示例:切换到警告状态
private void btnWarning_Click(object sender, EventArgs e)
{
industrialLed1.CurrentStatus = IndustrialLed.LedStatus.Warning;
industrialLed1.EnableFlash = true;
}
// 示例:切换到待机状态
private void btnStandby_Click(object sender, EventArgs e)
{
industrialLed1.CurrentStatus = IndustrialLed.LedStatus.Standby;
industrialLed1.EnableFlash = false;
}
// 示例:自定义指示灯颜色
private void btnCustomColor_Click(object sender, EventArgs e)
{
industrialLed1.RunningColor = Color.Cyan; // 自定义运行状态为青色
industrialLed1.FaultColor = Color.Magenta; // 自定义故障状态为洋红
industrialLed1.CurrentStatus = IndustrialLed.LedStatus.Running;
}
}
}
```
### 关键特性说明
- 多状态支持:内置待机、运行、故障、警告四种状态,并支持扩展。
- 自定义颜色:每个状态的颜色均可通过属性面板或代码进行修改。
- 闪烁效果:仅对故障和警告状态提供可选的闪烁效果,且可以自定义闪烁间隔。
- 立体感设计:通过阴影和高光效果增强视觉质感。
- 高可复用性:作为`UserControl`,易于集成与复用。
## 总结
本文介绍了一个实用的工控指示灯控件`IndustrialLed`的实现过程,展示了如何利用C#中的`UserControl`来构建具有高度自定义性的UI组件。通过这个控件,开发能够快速地为工控应用添加直观的状态指示功能。
## 关键词
工控指示灯、自定义控件、UserControl、状态切换、颜色自定义、闪烁效果、立体感设计、高可复用性
