C# 限制文本框仅输入数字的实现思路
在 Windows 窗体或 WPF 开发中,我们经常需要限制用户只能在特定控件中输入数字,比如金额输入框或身份证号校验。最直接的方式是在键盘按下事件中拦截非法字符。
核心逻辑
利用 KeyPress 事件,我们可以获取按键对应的 ASCII 码。数字字符 '0' 到 '9' 对应的编码范围是 48 到 57,而退格键(Backspace)通常是 8。
代码示例
下面是一个标准的 WinForms 事件处理方法,演示如何过滤非数字字符:
private void numericTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
// 判断是否为数字 (ASCII 48-57) 或者退格键 (ASCII 8)
if ((e.KeyChar >= 48 && e.KeyChar <= 57) || e.KeyChar == 8)
{
// 允许通过,不拦截
e.Handled = false;
}
else
{
// 拦截该按键,视为无效输入
e.Handled = true;
}
}
注意事项
- 运算符优先级:原逻辑中混合使用了位运算符号
&和|,虽然在此场景下能工作,但建议使用逻辑运算符&&和||以提高可读性。 - 小数点支持:如果还需要支持小数点,记得将
.(ASCII 46) 也加入白名单,同时注意防止重复输入。 - 负号处理:若需支持负数,还需额外判断
-(ASCII 45) 且仅在首位允许。
这种基于 ASCII 码的判断方式简单高效,适用于大多数基础输入场景。

