3.9 KiB
3.9 KiB
状态监控设置弹窗实现说明
需求概述
将NormalTemperatureMode页面顶部状态栏中的常温/高温模式指示和阀门状态展示区域,移动到一个新的设置弹窗中展示。
实现方案
1. 新建状态设置弹窗 (StatusSettingsForm)
文件结构
StatusSettingsForm.cs- 窗体逻辑代码StatusSettingsForm.Designer.cs- 窗体UI设计代码
主要功能
-
温度模式显示区域
- 常温模式指示灯 (uiLight1_Status) - 蓝色
- 高温模式指示灯 (uiLight2_Status) - 红色
- 当前模式文本 (uiLabel11_Status)
-
阀门状态显示区域 (10个阀门指示灯)
- uiLight3_Status: 高压出阀
- uiLight4_Status: 高压进阀
- uiLight5_Status: 常温抽水阀
- uiLight6_Status: 常温水箱加水阀
- uiLight7_Status: 高温抽水阀
- uiLight8_Status: 空气抽气阀
- uiLight9_Status: 加热状态
- uiLight10_Status: 常温回水阀
- uiLight11_Status: 高温水箱加水阀
- uiLight12_Status: 高温回水阀
-
实时更新机制
- 使用Timer每500ms从父窗体获取最新状态
- 通过父窗体的
UpdateStatusSettingsForm方法获取控件状态 - 支持线程安全的UI更新
2. 修改NormalTemperatureMode主窗体
新增内容
-
私有字段
private StatusSettingsForm _statusSettingsForm; -
公共更新方法
public void UpdateStatusSettingsForm(StatusSettingsForm form)- 从主窗体读取所有指示灯和标签的状态
- 调用StatusSettingsForm的更新方法传递状态
-
打开窗体方法
private void OpenStatusSettingsForm()- 创建或激活StatusSettingsForm实例
- 实现单例模式,避免重复创建
-
按钮事件修改
- 修改uiButton14的MouseUp事件
- 短按:打开状态设置窗体
- 长按(1秒以上):打开系数设置窗体
3. 项目文件更新
在全自动水压检测仪.csproj中添加新文件引用:
<Compile Include="StatusSettingsForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StatusSettingsForm.Designer.cs">
<DependentUpon>StatusSettingsForm.cs</DependentUpon>
</Compile>
使用说明
打开状态设置窗体
- 在NormalTemperatureMode主界面
- 短按隐藏按钮(uiButton14)
- 弹出状态设置窗体
窗体特性
- 窗体大小:850 x 550 像素
- 居中显示在父窗体上方
- 不显示在任务栏
- 实时更新状态(每500ms)
- 点击"关闭"按钮关闭窗体
技术要点
1. 状态同步
- 使用Timer定时器实现自动更新
- 通过父窗体公共方法获取状态
- 线程安全的UI更新(使用Invoke)
2. 控件状态映射
// 温度模式
uiLight1 (主窗体) → uiLight1_Status (设置窗体)
uiLight2 (主窗体) → uiLight2_Status (设置窗体)
uiLabel11 (主窗体) → uiLabel11_Status (设置窗体)
// 阀门状态
uiLight3-12 (主窗体) → uiLight3-12_Status (设置窗体)
3. 布局设计
- 温度模式区域:顶部,高度120px
- 阀门状态区域:中部,高度280px,5列2行布局
- 关闭按钮:底部居中
注意事项
-
生产环境可用性
- 所有代码经过空值检查
- 异常处理完善
- 线程安全保证
-
性能优化
- 定时器间隔500ms,平衡实时性和性能
- 窗体关闭时自动停止定时器
- 使用单例模式避免重复创建
-
正确取值
- 直接从主窗体控件读取State属性
- 保证状态的准确性和实时性
-
正确显示状态
- 指示灯颜色:绿色(开启)、灰色(关闭)
- 温度模式:蓝色(常温)、红色(高温)
- 文本标签清晰标注每个状态的含义
测试建议
- 测试窗体打开和关闭
- 验证状态实时更新
- 检查所有指示灯显示正确
- 测试长按和短按按钮功能
- 验证多次打开窗体的稳定性