当前位置: 首页 > news >正文

C# 动态管理控件和事件,批量查询管理同类控件

代码功能总结

这段代码是一个 C# Windows Forms 应用中的事件处理函数,用于响应数值选择器(NumericUpDown)控件的值变化。其核心功能是根据用户选择的数据长度,动态管理 64 个文本框的启用状态和事件处理器。

关键功能点

  1. 数据长度计算

    • 根据 DLC(数据长度代码)和 CAN FD 模式选项计算实际数据长度
    • 使用辅助方法GetLengthFromDLC处理不同模式下的长度转换
  2. 控件动态管理

    • 通过控件名称动态查找 64 个文本框控件(txtData0 到 txtData63)
    • 使用递归查找确保能找到嵌套在容器中的控件
  3. 启用状态控制

    • 仅启用索引小于实际数据长度的文本框
    • 实现了根据数据长度动态显示 / 隐藏输入字段的功能
  4. 事件处理器管理

    • 使用 "移除 - 添加" 模式避免事件重复注册
    • 所有文本框共享相同的输入验证逻辑(KeyPress 事件)
    • 所有文本框共享相同的焦点离开处理逻辑(Leave 事件)

代码设计亮点

  • 动态控件查找:避免了为 64 个文本框编写重复代码
  • 事件安全注册:通过先移除再添加的方式防止事件重复绑定
  • 健壮性处理:包含了控件存在性检查和类型转换验证

// 数据长度变化事件处理函数
private void nudLength_ValueChanged(object sender, EventArgs e)
{int iLength = GetLengthFromDLC((int)nudLength.Value, !chbFD.Checked); // 获取数据长度,考虑是否为FD模式for (int i = 0; i < 64; i++)                       // 循环遍历 64 个文本框控件{string controlName = "txtData" + i.ToString(); // 控件名称格式为 txtData0, txtData1, ..., txtData63//通过控件名称查找对应的文本框控件,使用递归查找模式 (true) 确保能找到嵌套在容器控件中的文本框Control[] foundControls = this.Controls.Find(controlName, true); if (foundControls.Length == 0) continue;       // 如果没有找到对应的控件则跳过当前循环TextBoxControl txtBox = foundControls[0] as TextBoxControl;  // 确保找到的控件是 TextBox 类型if (txtBox == null) continue;                  // 如果不是 TextBox 类型则跳过// 设置启用状态txtBox.Enabled = i < iLength;                  // 仅当 i 小于 iLength 时启用文本框// 添加 KeyPress 事件(自动去重)              txtBox.KeyPress -= txtID_KeyPress;             // 先移除确保不重复txtBox.KeyPress += txtID_KeyPress;             // 添加 KeyPress 事件处理器// 添加 Leave 事件(自动去重)                 txtBox.Leave -= txtData0_Leave;                // 先移除确保不重复txtBox.Leave += txtData0_Leave;                // 添加 Leave 事件处理器}
}

http://www.xdnf.cn/news/1001881.html

相关文章:

  • JavaWeb期末速成 JSP
  • 浅谈DaemonSet
  • PRIMES“中国校准实验室”正式运营,携手东隆科技共筑精准测量新标准
  • 通过同步压缩小波变换实现信号的分解和重构
  • 概率论几大分布的由来
  • 基于STM32汽车温度空调控制系统
  • Unity-通过Transform类学习迭代器模式
  • 数据集-目标检测系列- 孔雀 数据集 peacock >> DataBall
  • FFmpeg 压缩视频文件
  • 力扣HOT100之技巧:136. 只出现一次的数字
  • C#调用C++ 结构体方法
  • GitHub 上 PAT 和 SSH 的 7 个主要区别:您应该选择哪一个?
  • Transformer 与 XGBoost 协同优化的时间序列建模
  • LSTM助力迁移学习!深度学习架构性能提升,准确率达到99.91%!
  • TCN+Transformer+SE注意力机制多分类模型 + SHAP特征重要性分析,pytorch框架
  • 用于在多个远程计算机上求解的 Ansoft RSM 设置 - Windows
  • 实战案例-FPGA的JESD204B IP核配置详解
  • 【springboot组件开发】三方中间件自定义自动装载(rabbitmq/rocketmq/cmq)
  • 记录一次jenkins slave因为本地安装多个java版本导致的问题
  • stm32f103 标准库移植rt-thread nano
  • 学习笔记整理之状态图与状态图搜索
  • Windows 提权工具(“Potato“ 系列)用法指南
  • 火线、零线、地线 基础知识
  • 实现图片懒加载
  • 大话软工笔记—架构的概要设计
  • 【AS32系列MCU调试教程】基础配置:Eclipse项目与工具链的优化
  • SD-WAN优化云应用与多云架构访问的关键策略
  • 408考研逐题详解:2009年第39题
  • 深入探索IIC-OLED显示技术:嵌入式仿真平台如何重塑高校教学范式——深圳航天科技创新研究院技术赋能新一代工程教育
  • 观点 | 科技企业到了品牌建设的历史性窗口期