# ELEControls
**Repository Path**: jinyutou/elecontrols
## Basic Information
- **Project Name**: ELEControls
- **Description**: 基于 Element UI Plus 设计体系的 WinForms 自定义组件库,采用纯 GDI+ 绘制,提供 123 个开箱即用的主题化控件,覆盖基础、表单、数据展示、导航、反馈、布局、图表、工业控制八大类。
- **Primary Language**: C#
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2026-04-23
- **Last Updated**: 2026-10-27
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ELEControls
基于 **Element UI Plus** 设计体系的 **WinForms 自定义组件库**,采用纯 GDI+ 绘制,提供 **140 个**开箱即用的主题化控件,覆盖基础、表单、数据展示、导航、反馈、布局、图表、工业控制八大类。
> 免费开源 | .NET 8 + .NET Framework 4.8 | 纯 GDI+ | VS 设计器友好 | 多套内置主题 | 运行时动态主色 | 统一缓动引擎 | 内置国际化
---
## 特性
- **Element UI Plus 风格** — 完整移植 Web 端设计令牌(色彩、圆角、间距、阴影)到桌面端
- **纯 GDI+ 渲染** — 不依赖第三方绘图库,双缓冲 + 抗锯齿,流畅无闪烁
- **主题系统** — 内置多套配色方案(单一主色自动推导全套配色),支持运行时一键切换与 `SetPrimaryColor` 动态换主色,可自定义扩展
- **统一动效引擎** — `ELEAnimation` / `ELEAnimationRunner` 集中 9 条缓动曲线与帧驱动,弹层淡入淡出走 `ELEPopupAnimator`,静态图层走 `ELECachedLayer` 离屏缓存,全局开关可一键关闭全部动画
- **内置国际化** — 轻量零破坏的 i18n 门面,内置 `en-US` / `zh-TW` 语言包,运行时热切换、待译底稿工作流
- **DPI 自适应** — 内置 `ELEDPIScale` 缩放因子,高分屏下自动适配
- **VS 设计器支持** — 所有控件均可在 Visual Studio 可视化设计器中拖放使用
- **统一命名空间** — 所有类型统一在 `ELE.UI` 命名空间下,引用即用
- **工业控件** — 提供仪表盘、液位罐、风机、泵、阀门、输送带、多层报警灯、注射器等 SCADA 级工控组件
---
## 环境要求
| 项目 | 要求 |
|------|------|
| 框架 | .NET 8.0 (net8.0-windows) **或** .NET Framework 4.8 (net48) |
| IDE | Visual Studio 2022 17.8+ |
| 系统 | Windows 10 / 11 |
| 许可 | MulanPSL-2.0 |
---
## 快速开始
### 1. 引用项目
将 `src\ELEControls` 项目添加到你的解决方案中,然后在 WinForms 项目里添加项目引用:
```xml
```
### 2. 引入命名空间
```csharp
using ELE.UI;
```
### 3. 使用控件
**代码方式:**
```csharp
var btn = new ELEButton
{
Text = "主要按钮",
Type = ELEComponentType.Primary,
Size = ELEComponentSize.Default,
Location = new Point(20, 20)
};
this.Controls.Add(btn);
```
**设计器方式:**
编译项目后,所有 ELE 控件会自动出现在 VS 工具箱的 **ELEControls** 分类中,直接拖放到窗体即可。
### 4. 切换主题
```csharp
// 设置全局主题(入参为 ELETheme 枚举)
ELEStyles.SetStyle(ELETheme.Blue); // 内置主题
ELEStyles.SetStyle(ELETheme.Dark); // 暗色主题
// 可选主题: Light, Blue, Green, Orange, Red, Purple, Gray,
// Dark, DarkBlue, Black, Custom
// 运行时动态主色:一个种子色推导整套配色
ELEStyles.SetPrimaryColor(Color.FromArgb(64, 158, 255));
```
### 5. 切换语言(国际化)
```csharp
// 启用库内置语言包(英文);也支持 zh-TW 繁体,或注入自定义翻译源
ELELocalization.Provider = ELELocalization.CreateBuiltInLocalizer("en-US");
ELELocalization.SetLanguage("en-US"); // 全库运行时热切换,无需重启
```
> 不接入国际化时,库默认输出中文,开箱即用、零配置。
---
## 项目结构
```
src/ELEControls/
├── Core/ # 核心基础
│ ├── ELEControl.cs # 主基类 (继承 Control)
│ ├── ELEUserControl.cs # 复合基类 (继承 UserControl)
│ ├── ELEEnums.cs # 枚举定义
│ ├── ELEGlobal.cs # 全局常量
│ ├── ELEAnimation.cs # 统一缓动引擎(曲线 + 帧驱动 + 全局开关)
│ ├── ELEPopupAnimator.cs # 弹层淡入淡出助手
│ ├── ELELocalization.cs # 国际化门面 (取词/切换/热刷新)
│ ├── ELEDictionaryLocalizer.cs # 字典语言包翻译源
│ ├── ELELocale.cs # 日期/星期共享本地化辅助
│ └── IELEStyle.cs # 主题接口
├── Style/ # 主题样式
│ ├── ELEColor.cs # 颜色常量
│ ├── ELETheme.cs # 主题枚举
│ ├── ELEBaseStyle.cs # 基础样式 (150+ 虚属性, 由主色推导全套配色)
│ ├── ELEStyleColor.cs # 内置主题实现
│ ├── ELEStyles.cs # 全局主题管理器
│ └── ELEDPIScale.cs # DPI 缩放
├── Language/ # 内置语言包 (嵌入资源)
│ ├── en-US.lang # 英文
│ └── zh-TW.lang # 繁体中文
├── Common/ # 公共工具
│ ├── ELEGDI.cs # GDI+ 扩展方法
│ └── ELECachedLayer.cs # 离屏位图缓存层
├── Forms/ # 窗体
│ ├── ELEBaseForm.cs # 基础窗体 (自定义标题栏)
│ ├── ELEForm.cs # 标准窗体
│ ├── ELEMessageForm.cs # 消息弹窗
│ ├── ELEDialog.cs # 对话框
│ └── ELEDrawer.cs # 抽屉面板
└── Controls/ # 控件 (按分类)
├── Basic/ # 基础控件
├── Form/ # 表单控件
├── Data/ # 数据展示
├── Navigation/ # 导航控件
├── Feedback/ # 反馈控件
├── Layout/ # 布局容器
├── Chart/ # 图表控件
└── Industrial/ # 工业控件
```
---
## 组件一览
> 以下清单按展示用途节选(括号内为该节选列出的条目数),工具箱可见控件共 **140** 个;完整分类清单见 [工具箱分类速查表](docs/TOOLBOX-CATEGORIES.md)。
### 基础控件 (6)
| 控件 | 类名 | 说明 |
|------|------|------|
| 按钮 | `ELEButton` | 支持 Primary/Success/Warning/Danger/Info 五种语义类型,Round/Circle 形状 |
| 图片按钮 | `ELEImageButton` | 支持图标+文字组合按钮 |
| 标签 | `ELELabel` | 主题化文本标签 |
| 分割线 | `ELELine` | 水平/垂直分割线 |
| 链接 | `ELELink` | 主题化超链接文本 |
| 图标 | `ELEIcon` | 矢量图标显示控件,支持 Iconify 图标资源与主题色 |
### 表单控件 (29)
| 控件 | 类名 | 说明 |
|------|------|------|
| 文本框 | `ELETextBox` | 带图标、清除按钮的输入框 |
| 多行文本 | `ELETextArea` | 多行输入框,支持字数统计 |
| 密码框 | `ELEPasswordBox` | 密码输入,支持显示/隐藏切换 |
| 搜索框 | `ELESearchBox` | 带搜索图标和清除按钮 |
| 数字文本框 | `ELENumericTextBox` | 支持格式验证的数字输入 |
| 数字输入 | `ELEInputNumber` | 带 +/- 按钮的数字调节器 |
| 复选框 | `ELECheckBox` | 主题化复选框 |
| 复选框组 | `ELECheckBoxGroup` | 复选框组容器 |
| 单选按钮 | `ELERadioButton` | 主题化单选按钮 |
| 单选组 | `ELERadioGroup` | 单选按钮组容器 |
| 开关 | `ELESwitch` | 滑动开关,支持自定义文字 |
| 下拉框 | `ELEComboBox` | 主题化下拉选择框 |
| 级联选择 | `ELECascader` | 多级联动选择器 |
| 树选择 | `ELETreeSelect` | 下拉树形选择器 |
| 日期选择 | `ELEDatePicker` | 日期选择器,带日历弹窗 |
| 时间选择 | `ELETimePicker` | 时间选择器 |
| 滑块 | `ELETrackBar` | 基础滑块 |
| 高级滑块 | `ELESlider` | 带刻度标记的滑块 |
| 范围滑块 | `ELERangeSlider` | 双滑块范围选择 |
| 评分 | `ELERate` | 星级评分 |
| 颜色选择 | `ELEColorPicker` | 颜色选择器 |
| 色轮 | `ELEColorWheel` | HSV 色轮选色器 |
| 文件上传 | `ELEUpload` | 文件上传,支持拖放 |
| 自动补全 | `ELEAutoComplete` | 输入自动补全建议 |
| 标签输入 | `ELETagInput` | 标签式多值输入 |
| 提及输入 | `ELEMention` | @提及输入框 |
| 分段器 | `ELESegmented` | iOS 风格分段选择 |
| 虚拟键盘 | `ELEKeyboard` | 数字/全键盘虚拟键盘 |
| 富文本 | `ELERichTextBox` | 主题化富文本编辑器 |
### 数据展示控件 (30)
| 控件 | 类名 | 说明 |
|------|------|------|
| 标签 | `ELETag` | 语义标签,支持 Light/Dark/Plain 效果 |
| 徽章 | `ELEBadge` | 数字/圆点徽章 |
| 头像 | `ELEAvatar` | 图片/文字头像 |
| 卡片 | `ELECard` | 信息卡片容器 |
| 数据表格 | `ELEDataGridView` | 主题化数据网格 |
| 表格 | `ELETable` | 轻量自绘表格,支持单元格合并与拖拽调整行列尺寸 |
| 树视图 | `ELETreeView` | 主题化树形控件 |
| 列表框 | `ELEListBox` | 主题化列表选择 |
| 分页 | `ELEPagination` | 分页导航 |
| 进度条 | `ELEProgressBar` | 线性进度条 |
| 环形进度 | `ELECircleProgressBar` | 环形/仪表盘进度条 |
| 滚动条 | `ELEScrollBar` | 主题化滚动条 |
| 时间线 | `ELETimeline` | 垂直时间线 |
| 描述列表 | `ELEDescriptions` | 键值对描述列表 |
| 空状态 | `ELEEmpty` | 空数据占位提示 |
| 结果页 | `ELEResult` | 操作结果反馈页 |
| 统计值 | `ELEStatistic` | 数值统计展示 |
| 水印 | `ELEWatermark` | 页面水印覆盖 |
| 骨架屏 | `ELESkeleton` | 加载占位骨架 |
| 折叠面板 | `ELECollapse` | 手风琴折叠面板 |
| 穿梭框 | `ELETransfer` | 双列表穿梭选择 |
| 日历 | `ELECalendar` | 月份日历视图 |
| 图片 | `ELEImage` | 图片展示,支持 Fit 模式与预览 |
| 走马灯 | `ELECarousel` | 轮播图,支持自动播放 |
| 分割线 | `ELEDivider` | 带文字内容的分割线 |
| 滚动文字 | `ELEScrollingText` | 跑马灯文字效果 |
| 时钟 | `ELEClock` | 模拟时钟 |
| 倒计时 | `ELECountDown` | 倒计时计时器 |
| 无限滚动 | `ELEInfiniteScroll` | 滚动加载容器 |
| 虚拟滚动 | `ELEVirtualScroll` | 大数据虚拟列表 |
### 导航控件 (13)
| 控件 | 类名 | 说明 |
|------|------|------|
| 选项卡 | `ELETabControl` | 主题化选项卡 |
| 面包屑 | `ELEBreadcrumb` | 面包屑导航 |
| 导航菜单 | `ELENavMenu` | 侧边/顶部导航菜单 |
| 下拉菜单 | `ELEDropdown` | 下拉菜单,支持分割按钮 |
| 步骤条 | `ELESteps` | 步骤进度导航 |
| 工具栏 | `ELEToolStrip` | 主题化工具栏 |
| 菜单栏 | `ELEMenuStrip` | 主题化菜单栏 |
| 状态栏 | `ELEStatusStrip` | 主题化状态栏 |
| 右键菜单 | `ELEContextMenuStrip` | 主题化上下文菜单 |
| 页头 | `ELEHeaderPanel` | 带返回按钮的页面头部 |
| 回到顶部 | `ELEBackTop` | 浮动回到顶部按钮 |
| 锚点导航 | `ELEAnchor` | 锚点定位导航 |
| 小地图 | `ELEMiniMap` | 可滚动容器缩略导航 |
### 反馈控件 (7)
| 控件 | 类名 | 说明 |
|------|------|------|
| 提示 | `ELEAlert` | 内联警告/提示条 |
| 通知 | `ELENotification` | 桌面通知弹窗 (静态方法调用) |
| 加载 | `ELELoading` | 全屏/局部加载遮罩 |
| 消息条 | `ELEMessageBar` | 顶部消息提示条 |
| 气泡提示 | `ELEPopover` | 气泡卡片弹出层 |
| 文字提示 | `ELEToolTip` | 悬浮文字提示 |
| 固钉 | `ELEAffix` | 元素固定定位 |
### 布局控件 (14)
| 控件 | 类名 | 说明 |
|------|------|------|
| 面板 | `ELEPanel` | 基础面板容器 |
| 标题面板 | `ELETitlePanel` | 带标题的面板 |
| 分组框 | `ELEGroupBox` | 主题化分组框 |
| 主框架 | `ELEMainFrame` | 侧栏+顶栏+内容区布局 |
| 栅格行 | `ELERow` | 栅格系统行容器 |
| 间距容器 | `ELESpace` | 自动间距布局 |
| 布局容器 | `ELEContainer` | Element 风格布局容器 |
| 页脚 | `ELEFooter` | 页面底部容器 |
| 侧栏 | `ELEAside` | 可折叠侧边栏 |
| 仪表盘 | `ELEDashboard` | 卡片网格仪表盘布局 |
| 分割面板 | `ELESplitContainer` | 主题化分割面板 |
| 流式布局 | `ELEFlowLayoutPanel` | 主题化流式布局 |
| 表格布局 | `ELETableLayoutPanel` | 主题化表格布局 |
| 分页容器 | `ELEPage` | 多页面切换容器 |
### 窗体 (5)
| 控件 | 类名 | 说明 |
|------|------|------|
| 基础窗体 | `ELEBaseForm` | 自定义标题栏窗体基类 |
| 标准窗体 | `ELEForm` | 通用主题窗体 |
| 消息窗体 | `ELEMessageForm` | 消息弹窗 (替代 MessageBox) |
| 对话框 | `ELEDialog` | 模态对话框 |
| 抽屉 | `ELEDrawer` | 侧滑抽屉面板 |
### 图表控件 (8)
| 控件 | 类名 | 说明 |
|------|------|------|
| 折线图 | `ELELineChart` | 多系列折线图,支持平滑曲线 |
| 柱状图 | `ELEBarChart` | 多系列柱状图,支持堆叠 |
| 饼图 | `ELEPieChart` | 饼图/环形图 |
| 面积图 | `ELEAreaChart` | 面积填充图 |
| 散点图 | `ELEScatterChart` | 散点图 |
| 雷达图 | `ELERadarChart` | 雷达/蛛网图 |
| 漏斗图 | `ELEFunnelChart` | 漏斗图 |
| 甘特图 | `ELEGanttBar` | 甘特图,支持滚动 |
### 工业控件 (18)
| 控件 | 类名 | 说明 |
|------|------|------|
| 仪表盘 | `ELEMeter` | 指针式仪表 |
| 高级仪表 | `ELEGauge` | 多段彩色仪表 |
| LED 标签 | `ELELedLabel` | LED 数码管显示 |
| 管道 | `ELEPipe` | 工业管道,支持流向动画 |
| 阀门 | `ELEValve` | 工业阀门,开/关状态 |
| 温度计 | `ELEThermometer` | 温度计显示 |
| 波形图 | `ELEWaveChart` | 实时波形/趋势图 |
| 液位罐 | `ELETank` | 液位显示,带波纹动画 |
| 风机 | `ELEFan` | 旋转风机,带叶片动画 |
| 水泵 | `ELEPump` | 工业水泵,带叶轮动画 |
| 设备块 | `ELEProcessDevice` | 工艺流程设备块 |
| 信号灯 | `ELESignalLight` | 多色信号灯,支持闪烁 |
| 电池 | `ELEBattery` | 电池电量显示 |
| 气缸 | `ELECylinder` | 工业气缸,伸出/缩回状态 |
| 电阻 | `ELEResistor` | 电路电阻元件 |
| 输送带 | `ELEConveyor` | 物料输送带,带面/滚筒/料箱三段动画联动,支持正反转 |
| 多层报警灯 | `ELEAlarmLamp` | 红/黄/绿塔灯,支持常亮与闪烁、点亮光晕 |
| 注射器 | `ELESyringe` | 定量加注示意,液位变化带缓动动画 |
---
## 色彩体系
ELEControls 完整移植了 Element UI Plus 的语义色彩系统:
| 语义 | 色值 | 用途 |
|------|------|------|
| Primary | `#409EFF` | 主操作、链接、选中态 |
| Success | `#67C23A` | 成功状态、确认操作 |
| Warning | `#E6A23C` | 警告信息、需要注意 |
| Danger | `#F56C6C` | 危险操作、错误状态 |
| Info | `#909399` | 辅助信息、次要文本 |
每个主色调自动生成 16 级渐变色阶(Light-1 到 Light-9、Dark-2),用于悬停、按下、禁用等状态。
---
## 主题切换
> 完整说明见 [**主题切换文档**](./docs/主题切换.md)。
### 内置主题
```csharp
// 在应用启动时设置全局主题(入参为 ELETheme 枚举)
ELEStyles.SetStyle(ELETheme.Blue);
```
主题切换以 **`ELETheme` 枚举** 为入参。内置主题覆盖亮色与多套语义主色及暗色变体:
`Light` `Blue` `Green` `Orange` `Red` `Purple` `Gray` `Dark` `DarkBlue` `Black` `Custom`。
整套配色由**单一主色种子**经 16 级渐变自动推导(`ELEBaseStyle.Init`),换主色即换整套主题。每个控件的 `Style` 属性默认 `Inherited`(跟随全局),也可对单个控件局部覆盖:
```csharp
var panel = new ELEPanel { Style = ELETheme.Dark }; // 仅此控件用暗色,其余跟随全局
```
### 自定义主题
继承 `ELEBaseStyle`,用你的主色调 `Init` 打底(150+ 颜色属性可逐个覆盖),再登记到某个 `ELETheme` 槽位:
```csharp
public class MyBrandStyle : ELEBaseStyle
{
public MyBrandStyle()
{
// 品牌色做主色种子,其余配色全部自动推导
Init(ColorTranslator.FromHtml("#6366F1"), ELETheme.Custom, Color.White, ELEFontColor.Primary);
// 需要偏离默认配色的(如暗色)再单独覆盖个别属性
// PanelFillColor = ColorTranslator.FromHtml("#1D1E1F");
}
}
// 注册并应用自定义主题
ELEStyles.RegisterStyle(ELETheme.Custom, new MyBrandStyle());
ELEStyles.SetStyle(ELETheme.Custom);
```
---
## 国际化
> 完整说明见 [**国际化文档**](./docs/国际化.md)。
ELEControls 内置一套**轻量、零破坏**的国际化机制:中文文案以「母本」硬编码在各控件,只有注入翻译源时才走取词与热切换。**不接入国际化 = 纯中文,开箱即用。**
```csharp
using ELE.UI;
// 启用库内置官方语言包(随 DLL 嵌入发布,无需额外文件)
ELELocalization.Provider = ELELocalization.CreateBuiltInLocalizer("en-US");
ELELocalization.SetLanguage("en-US"); // 运行时全库热切换,无需重启
```
- **内置语言包**:`en-US`(英文)、`zh-TW`(繁体中文),登记于 `ELELocalization.BuiltInLanguages`。
- **外置/自定义**:`ELEDictionaryLocalizer.FromFile(@"Language\xx.lang")` 加载 `key = 译文` 文本,或实现 `IELELocalizer` 接入 resx / JSON / 数据库。
- **待译底稿**:开发期开启 `ELELocalization.TrackUntranslated = true`,用 `ExportPendingKeys` 导出未命中 key + 中文母本,翻译后直接回作语言包。
- **收口手法**:控件内置文案统一走 `字段 ?? ELELocalization.Get("Key", "中文母本")` 的 getter 回退——用户显式赋值永远优先,不新增属性、不破坏现有 API。
> 设计器元数据(属性面板 `[Description]`/`[Category]`、TypeEditor 对话框、用户内容默认值)属于开发者可见文本,**不随语言切换**。
---
## 动效与弹层
> 完整说明见 [**动效与弹层文档**](./docs/动效与弹层.md)。
库把“定时器逐帧推进”收敛为三项框架能力,共享一个全局开关:
```csharp
// 统一缓动:一个 Runner = 一个 16ms 定时器(回调在 UI 线程,无需 Invoke)
var runner = new ELEAnimationRunner();
runner.Run(0f, 1f, v => { _progress = v; Invalidate(); }, null, 300, ELEAnimationType.EaseOutCubic);
// 弹层过渡:淡入必须在 Show() 之前调用
ELEPopupAnimator.FadeIn(popupForm, 120);
popupForm.Show(owner);
// 静态图层离屏缓存:尺寸不变且未标脏时逐帧只贴图
var bmp = _cached.Render(g, new Size(Width, Height), ig => PaintStatics(ig));
// 低配机 / 远程桌面:一行关掉全库动画,所有缓动直接落终值
ELEAnimation.Enabled = false;
ELEAnimation.DefaultDuration = 200;
```
已接入的控件:`ELESwitch`(180ms 滑块)、`ELEDrawer`(开合曲线)、`ELEDropdown` / `ELEToolTip`(弹层淡入)、`ELESyringe`(液位缓动 + 离屏缓存)。
---
## 渲染架构
所有控件采用**模板方法模式**渲染管线,继承自 `ELEControl` 或 `ELEUserControl`:
```
OnPaint
├── OnPaintFill() → 填充背景
├── OnPaintRect() → 绘制边框
└── OnPaintFore() → 绘制前景内容
```
自定义控件只需继承基类并覆盖对应方法:
```csharp
public class MyControl : ELEControl
{
protected override void OnPaintFill(Graphics g, GraphicsPath path)
{
// 自定义背景绘制
}
protected override void OnPaintFore(Graphics g, GraphicsPath path)
{
// 自定义前景绘制
}
}
```
### 状态管理
控件自动管理以下交互状态,每种状态对应独立的颜色组(FillColor / RectColor / ForeColor):
| 状态 | 说明 |
|------|------|
| Normal | 默认状态 |
| Hover | 鼠标悬停 |
| Press | 鼠标按下 |
| Selected | 选中状态 |
| Disabled | 禁用状态 |
| ReadOnly | 只读状态 |
| Focused | 获得焦点 |
---
## 枚举类型参考
### ELEComponentType — 语义类型
```csharp
Default | Primary | Success | Warning | Danger | Info
```
### ELEComponentSize — 组件尺寸
```csharp
Large (40px) | Default (32px) | Small (24px)
```
### ELEButtonShape — 按钮形状
```csharp
Default | Round | Circle
```
### ELEPlacement — 弹出位置
```csharp
Top | TopStart | TopEnd | Bottom | BottomStart | BottomEnd
Left | LeftStart | LeftEnd | Right | RightStart | RightEnd
```
### ELEDirection — 方向
```csharp
Up | Down | Left | Right
```
---
## 使用示例
### 主题按钮组
```csharp
var btnPrimary = new ELEButton { Text = "主要", Type = ELEComponentType.Primary };
var btnSuccess = new ELEButton { Text = "成功", Type = ELEComponentType.Success };
var btnWarning = new ELEButton { Text = "警告", Type = ELEComponentType.Warning };
var btnDanger = new ELEButton { Text = "危险", Type = ELEComponentType.Danger };
var btnInfo = new ELEButton { Text = "信息", Type = ELEComponentType.Info };
```
### 表单输入
```csharp
var txtName = new ELETextBox
{
PlaceholderText = "请输入姓名",
Size = ELEComponentSize.Default,
Width = 240
};
var cboCity = new ELEComboBox
{
PlaceholderText = "请选择城市",
Size = ELEComponentSize.Default
};
cboCity.Items.AddRange(new[] { "北京", "上海", "广州", "深圳" });
```
### 数据表格
```csharp
var grid = new ELEDataGridView
{
Dock = DockStyle.Fill,
ShowCheckBoxes = true
};
grid.Columns.Add("Name", "姓名");
grid.Columns.Add("Age", "年龄");
grid.Rows.Add("张三", 28);
```
### 消息通知
```csharp
// 顶部消息条
ELEMessageBar.Show("操作成功!", ELEComponentType.Success);
// 右下角通知
ELENotification.Show("系统通知", "您有新的消息,请及时查看。");
// 模态消息框
ELEMessageForm.Show("确定删除?", "提示", MessageBoxButtons.YesNo);
```
### 图表
```csharp
var chart = new ELELineChart { Dock = DockStyle.Fill };
chart.Series.Add(new ELEChartSeries
{
Name = "销售额",
Data = new List { 120, 200, 150, 80, 70, 110, 130 }
});
chart.Categories = new List
{
"周一", "周二", "周三", "周四", "周五", "周六", "周日"
};
```
### 工业控件
```csharp
// 仪表盘
var meter = new ELEMeter
{
Value = 75.5,
MinValue = 0,
MaxValue = 100,
Unit = "℃"
};
// 液位罐
var tank = new ELETank
{
Value = 65,
MaxValue = 100,
ShowWave = true
};
// 阀门
var valve = new ELEValve
{
IsOpen = true,
Direction = ELEDirection.Right
};
// 输送带(正反转 + 料箱数)
var conveyor = new ELEConveyor
{
Running = true,
Direction = ELEDirection.Right,
Speed = 3f,
ItemCount = 4
};
// 多层报警灯(由设备状态驱动)
var lamp = new ELEAlarmLamp
{
Level = ELEAlarmLampLevel.Red,
Blinking = true,
BlinkInterval = 400
};
// 注射器(赋值即缓动过渡)
var syringe = new ELESyringe { Vertical = true };
syringe.Value = 80;
```
---
## 构建
```bash
dotnet build src\ELEControls\ELEControls.csproj -c Release
```
输出程序集位于:
- `src\ELEControls\bin\Release\net8.0-windows\ELEControls.dll` (.NET 8.0)
- `src\ELEControls\bin\Release\net48\ELEControls.dll` (.NET Framework 4.8)
---
## NuGet 包
本项目已发布到 NuGet,你可以直接通过 NuGet 包管理器安装:
### 安装方式
**Package Manager:**
```powershell
Install-Package ELEControls
```
**.NET CLI:**
```bash
dotnet add package ELEControls
```
**PackageReference:**
```xml
```
### 发布 NuGet 包
如果你想自己构建和发布 NuGet 包,请参考 [NuGet 发布指南](./docs/NUGET-PUBLISH-GUIDE.md)
快速开始:
```powershell
# 获取 API Key 后,一行命令完成发布
.\nuget-publish.ps1 -ApiKey "your-api-key"
```
---
## 许可证
本项目基于 [木兰宽松许可证 第2版 (MulanPSL-2.0)](http://license.coscl.org.cn/MulanPSL2) 开源。