C#怎么限制文本框只能输入中文_C#如何应用正则表达式【妙招】

张开发
2026/5/26 22:07:49 15 分钟阅读
C#怎么限制文本框只能输入中文_C#如何应用正则表达式【妙招】
应使用KeyPress事件拦截非中文字符放行退格、回车、Tab等控制符并覆盖基本汉字一-龥、全角标点 -〿、぀-ゟ、゠-ヿ等Unicode范围。TextBox 限制中文输入的正确写法直接在 keypress 事件里拦截非中文字符最稳比用 textchanged 正则回删更可靠——后者会闪、会破坏 undo 栈且光标位置容易错乱。关键不是“怎么匹配中文”而是“什么时候拦、拦什么”KeyPress 事件中e.KeyChar 是即将插入的单个字符类型是 char可直接判断 Unicode 范围中文常用范围是 一-龥基本汉字但实际还要包含全角标点如 -〿、぀-ゟ、゠-ヿ否则用户打顿号、书名号会失败别忘了放行控制字符e.KeyChar 退格、 回车、 Tab等否则无法编辑示例private void textBox1_KeyPress(object sender, KeyPressEventArgs e){ char c e.KeyChar; if (c ! c ! c ! !((c 一 c 龥) || (c c 〿) || (c ぀ c ゟ) || (c ゠ c ヿ))) { e.Handled true; }}为什么不用 Regex.Replace 在 TextChanged 里“过滤”看起来简洁实则埋雷用户粘贴一串混合文本比如“abc你好123”TextChanged 触发时Text 已被更新再用 Regex.Replace 清除非中文会导致光标跳到开头或末尾连续快速输入时正则执行赋值触发新事件可能引发重入或闪烁正则 [一-龥] 不匹配空格、换行、全角符号用户按空格或回车会被吞掉性能无必要每次按键都跑正则对低配设备或高频输入场景有感知延迟需要支持粘贴时的中文过滤怎么办KeyPress 拦不住粘贴得补上 Paste 场景 稿定AI 拥有线稿上色优化、图片重绘、人物姿势检测、涂鸦完善等功能

更多文章