C# WinForms TextBox 仅允许输入数字及小数点
本文介绍如何在C# Windows Forms应用中限制TextBox控件的输入内容。通过处理KeyPress事件,可以阻止非数字和非小数点的字符输入,同时优化了小数点的重复输入问题,确保用户只能输入有效的数值。
实现思路与目标
在编写涉及金额、数量或参数的界面时,强制用户只能输入数字能减少后续解析错误的风险。我们的目标是:
- 允许数字:0-9。
- 允许小数点:但需限制其出现的次数(通常只允许一个)。
- 允许删除键:如Backspace(退格键),以便用户修改输入。
- 拦截其他字符:字母、符号等其他所有按键直接忽略。
操作步骤
第1步:注册KeyPress事件
在窗体设计器或代码中,找到你的 TextBox 控件,并为其绑定 KeyPress 事件。假设该控件的名称为 txbEnd,双击该控件或在属性窗口的事件列表中选择KeyPress来生成事件处理器。
第2步:编写拦截逻辑
在事件处理方法中,我们需要检查按下的字符键(e.KeyChar)。根据前面的目标,逻辑如下:
- 处理小数点特殊情况:如果按下的是小数点
'.',且当前文本框中已经存在一个小数点(即索引不等于 -1),则视为非法输入,设置e.Handled = true以忽略该按键。 - 常规字符验证:如果不是小数点,也不是退格键(ASCII码为8),则检查是否为数字。数字的ASCII码范围是48到57。如果不满足这些条件,同样忽略按键。
第3步:完整代码实现
将以下代码复制到你生成的 KeyPress 事件方法中。请确保将代码中的 txbEnd 替换为你实际使用的TextBox控件名称。
// e.KeyChar == '.' && this.txbEnd.Text.IndexOf(".") != -1
// 表示:如果按下的是小数点,且当前文本中已包含小数点
if (e.KeyChar == '.' && this.txbEnd.Text.IndexOf(".") != -1)
{
e.Handled = true;
}
// 检查是否是非数字、非小数点、非退格键
// ASCII 48-57: '0'-'9'
// ASCII 8: Backspace
if (!((e.KeyChar >= 48 && e.KeyChar <= 57) || e.KeyChar == '.' || e.KeyChar == 8))
{
e.Handled = true;
}
完成判断与注意事项
运行程序后,尝试在文本框中输入字母(如 'a')、特殊符号(如 '@')或在已有小数点后再次输入小数点,你会发现光标不会移动且字符不会出现。而输入 0-9 和单个小数点,以及使用退格键删除字符均正常。 注意:
- 粘贴检查:上述代码仅捕获键盘按键事件。如果用户从其他地方复制 "abc" 并粘贴到文本框,此方法可能无法完全拦截。如需完全禁止粘贴,建议同时处理
TextChanged事件或使用正则表达式进行实时校验。 - 控件引用:代码中使用
this.txbEnd,如果你的控件不在当前窗体的命名空间内,或者名称不同,请务必调整对象引用路径。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













