C# WinForms TextBox 仅允许输入数字及小数点

Oliver
Oliver
发布时间:2026-10-13 | 2人浏览过
原创

本文介绍如何在C# Windows Forms应用中限制TextBox控件的输入内容。通过处理KeyPress事件,可以阻止非数字和非小数点的字符输入,同时优化了小数点的重复输入问题,确保用户只能输入有效的数值。

实现思路与目标

在编写涉及金额、数量或参数的界面时,强制用户只能输入数字能减少后续解析错误的风险。我们的目标是:

  • 允许数字:0-9。
  • 允许小数点:但需限制其出现的次数(通常只允许一个)。
  • 允许删除键:如Backspace(退格键),以便用户修改输入。
  • 拦截其他字符:字母、符号等其他所有按键直接忽略。

操作步骤

第1步:注册KeyPress事件

在窗体设计器或代码中,找到你的 TextBox 控件,并为其绑定 KeyPress 事件。假设该控件的名称为 txbEnd,双击该控件或在属性窗口的事件列表中选择KeyPress来生成事件处理器。

第2步:编写拦截逻辑

在事件处理方法中,我们需要检查按下的字符键(e.KeyChar)。根据前面的目标,逻辑如下:

  1. 处理小数点特殊情况:如果按下的是小数点 '.',且当前文本框中已经存在一个小数点(即索引不等于 -1),则视为非法输入,设置 e.Handled = true 以忽略该按键。
  2. 常规字符验证:如果不是小数点,也不是退格键(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,如果你的控件不在当前窗体的命名空间内,或者名称不同,请务必调整对象引用路径。
以上就是C# TextBox控件实现只能输入数字及小数点的详细内容,更多关于C# WinForms输入验证的资料请关注本站其它相关文章!
相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表