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

C# TextBox 控件限制输入字符为十六进制字符串

代码功能总结

上述代码用于限制 C# Windows Forms 应用程序中的 TextBox 控件,使其只能输入 16 进制字符(0-9、A-F)和空格,并自动将小写字母转换为大写。主要用途是创建一个用于输入和筛选 16 进制数据的文本框,例如 CAN 总线 ID 过滤、十六进制值搜索等场景。

核心功能

  1. 输入限制:只允许输入数字 0-9、字母 A-F(大小写均可)和空格
  2. 自动转换:自动将输入的小写字母转换为大写
  3. 验证功能:提供方法验证整个文本是否为有效的 16 进制字符串
  4. 清理功能:提供方法获取移除空格后的纯净 16 进制文本

使用方法

  1. 在窗体设计器中添加一个 TextBox 控件(命名为 textBoxFilter
  2. 在窗体类的构造函数中注册事件处理:
textBoxFilter.KeyPress += TextBoxFilter_KeyPress;
textBoxFilter.TextChanged += TextBoxFilter_TextChanged;

         详细代码

    using System;
    using System.Windows.Forms;public partial class YourForm : Form
    {public YourForm(){InitializeComponent();// 注册事件处理textBoxFilter.KeyPress += TextBoxFilter_KeyPress;textBoxFilter.TextChanged += TextBoxFilter_TextChanged;}private void TextBoxFilter_KeyPress(object sender, KeyPressEventArgs e){// 允许的字符:0-9, A-F, a-f, 空格if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && !((e.KeyChar >= 'A' && e.KeyChar <= 'F') || (e.KeyChar >= 'a' && e.KeyChar <= 'f')) && e.KeyChar != ' '){e.Handled = true; // 阻止输入无效字符}}private void TextBoxFilter_TextChanged(object sender, EventArgs e){// 将小写字符转换为大写if (textBoxFilter.Text != null){string upperCaseText = textBoxFilter.Text.ToUpper();if (upperCaseText != textBoxFilter.Text){// 防止递归调用textBoxFilter.TextChanged -= TextBoxFilter_TextChanged;textBoxFilter.Text = upperCaseText;textBoxFilter.SelectionStart = textBoxFilter.Text.Length;textBoxFilter.TextChanged += TextBoxFilter_TextChanged;}}}// 额外:验证整个文本是否为有效的16进制字符串private bool IsValidHexString(string text){// 移除所有空格string cleanText = text.Replace(" ", "");// 验证是否为空或仅包含16进制字符if (string.IsNullOrEmpty(cleanText))return true;foreach (char c in cleanText){if (!char.IsDigit(c) && !(c >= 'A' && c <= 'F'))return false;}return true;}// 额外:获取清理后的16进制文本(移除空格)public string GetCleanHexText(){return textBoxFilter.Text?.Replace(" ", "");}
    }

    实现说明

    1. KeyPress 事件处理

      • 允许输入的字符包括:
        • 控制字符(如退格、删除键)
        • 数字 0-9
        • 大写字母 A-F
        • 小写字母 a-f(会在 TextChanged 中转换为大写)
        • 空格
      • 无效字符会被阻止输入
    2. TextChanged 事件处理

      • 将输入的小写字母自动转换为大写
      • 使用 TextChanged -= TextBoxFilter_TextChanged 防止递归调用
      • 保持光标的正确位置
    3. 额外功能

      • IsValidHexString 方法验证整个文本是否为有效 16 进制字符串
      • GetCleanHexText 方法获取移除空格后的纯净 16 进制文本

    使用示例

    在窗体设计器中添加一个名为 textBoxFilter 的 TextBox 控件,然后将上述代码添加到窗体类中。当用户在文本框中输入时,会自动:

    • 阻止输入无效字符
    • 将小写字母转换为大写
    • 允许输入空格作为分隔符

    注意事项

    1. 性能考虑

      • 文本转换操作在 UI 线程执行,对于短文本输入影响可忽略
    2. 用户体验

      • 保留空格作为分隔符,方便输入多组 16 进制数
      • 实时反馈无效输入,提升用户体验
    3. 扩展可能性

      • 可修改 KeyPress 事件处理逻辑,允许更多字符(如短横线 - 作为分隔符)
      • 可添加输入长度限制

    这个实现方案能够有效限制 TextBox 控件只输入 16 进制字符串和空格,并自动将小写字符转换为大写,满足了数据筛选和输入验证的需求。

    相关文章:

  1. 什么是哈希函数
  2. AIGC 基础篇 Python基础 05 元组,集合与字典
  3. 深入理解 PCIe 协议中 BDF(Bus/Device/Function)分配与管理机制
  4. 华为云Flexus+DeepSeek征文 | 基于Dify构建多语言文件翻译工作流
  5. Qwen家族系列模型概述
  6. 二刷苍穹外卖 day02
  7. 强化学习入门:交叉熵方法实现CartPole智能体
  8. 【案例实战】轻创业技术手册:如何用最小MVP模型验证市场需求?低成本创业可以做什么?低成本创业项目排行榜前十名!轻资产创业项目做什么比较好?格行代理怎么样?
  9. 计算机网络 : 数据链路层
  10. Java/Kotlin selenium 无头浏览器 [Headless Chrome] 实现长截图
  11. 2025神经网络动力学理论、优化算法及应用专题研讨会 ( NOTAA 2025)
  12. 一键生成活动页面的智能体开发实践:从策划到分发的全自动化解决方案
  13. Android studio中git突然看不了提交记录
  14. flink1.19.2+cdc-3.2.1遇到的问题及解决方案
  15. 【AI大模型入门指南】概念与专有名词详解 (二)
  16. 达梦数据库单机部署dmhs同步复制(dm8->kafka)
  17. mac电脑.sh文件,用来清除git当前分支
  18. 代码填空题技术实现:突破 highlight.js 安全限制的工程实践
  19. 数值偏微分方程的代数骨架:线性代数及其挑战-AI云计算
  20. Cilium动手实验室: 精通之旅---23.Advanced Gateway API Use Cases
  21. 网站建设的技术/搜索推广
  22. 西班牙外贸网站/徐州关键词优化排名
  23. 网站建设竣工验收报告/新闻摘抄2022最新5篇
  24. 公司网站如何做的美丽/seo推广系统排名榜
  25. 和国外做贸易用什么网站/网络推广文案策划
  26. 做系统进化树的网站/淘大象排名查询