仅使用数字格式化文本框
Posted
技术标签:
【中文标题】仅使用数字格式化文本框【英文标题】:Format textbox with numbers only 【发布时间】:2021-12-24 04:17:14 【问题描述】:我有一个只接受数字,不接受其他字符的文本框。为此,我在 keypress
方法中创建了以下函数:
private void txtRGIE_KeyPress(object sender, KeyPressEventArgs e)
if (!Char.IsDigit(e.KeyChar) && e.KeyChar != (char)8)
e.Handled = true;
当我输入时验证正在工作,我无法输入我想要的特殊字符或字母。但是,如果我复制包含点或其他字符的数字字符串并将其粘贴到字段中,它会正常接受。例如,如果您复制:323.323 / 323 并粘贴到该字段中,它将接受。如何验证我粘贴的字符,只允许数字?
【问题讨论】:
实现TextChanged
事件处理程序
考虑使用MaskedTextbox
控件,这可能会使这个问题变得微不足道。
C# WinForms 应该有一个 NumericUpDown 控件,对吧?
【参考方案1】:
我有一个只接受数字的文本框
这就是缺陷;说“我这里有一把刀,我想用作螺丝刀,但我一直用它割伤自己,所以我把它锉平了,但是它太大了,无法进入螺丝孔,所以我把它锉小了,但是它不能很好地转动 + 形螺钉,并且尖端没有硬化,所以它一直在断裂..”
答案是使用+形螺丝刀,而不是反复尝试将不适合工作的东西拼凑成可以完成工作的东西
NumericUpDown 控件是完成这项工作的正确工具;它只接受数字,具有可配置的小数位和上限和下限,不能输入或粘贴字母数字文本,此外,用户可以使用向上和向下光标键更改值
NUD 是文本框的替代品,它是免费的,并且是标准库的一部分,因此无需安装任何东西 - 只需记住获取 .Value
,而不是 .Text
,它是decimal
,因此您可能希望将其转换为其他东西以使用它(double?int?),具体取决于您的应用程序的期望
如果您不喜欢向上向下的小按钮,请参阅here
【讨论】:
【参考方案2】:你可以使用:
private void txtRGIE_KeyPress(object sender, KeyPressEventArgs e)
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) &&
(e.KeyChar != '.'))
e.Handled = true;
// only allow one decimal point
if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1))
e.Handled = true;
或者您可以使用 NumericUpDown 代替 参考this answers 让你了解更多。
【讨论】:
这个功能在我输入时有效,但是,如果我复制一个带有其他字符的表达式并将其粘贴到字段中,它不会验证,例如允许我用点保存信息。 @Favieri 使用 numericupdown【参考方案3】:您可以使用MaskedTextBox 代替普通的。
【讨论】:
【参考方案4】:如前所述,NumericUpDown 控件是一个不错的选择,要使其看起来像 TextBox,您可以隐藏向上/向下箭头,例如
amountNumericUpDown1.Controls[0].Hide();
或者创建一个没有向上/向下箭头的自定义版本,在这种情况下按下回车键时不会发出哔哔声。
public class SpecialNumericUpDown : NumericUpDown
public SpecialNumericUpDown()
Controls[0].Hide();
TextAlign = HorizontalAlignment.Right;
protected override void OnTextBoxResize(object source, EventArgs e)
Controls[1].Width = Width - 4;
public delegate void TriggerDelegate();
public event TriggerDelegate TriggerEvent;
protected override void OnKeyDown(KeyEventArgs e)
if (e.KeyCode == (Keys.Return))
e.Handled = true;
e.SuppressKeyPress = true;
TriggerEvent?.Invoke();
return;
base.OnKeyDown(e);
【讨论】:
以上是关于仅使用数字格式化文本框的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ASP.NET 文本框中仅允许信用卡/借记卡号码格式