【问题标题】:Allow only decimal numbers in textbox in C#在 C# 的文本框中只允许十进制数字
【发布时间】:2015-09-24 09:20:53
【问题描述】:

我是 C# 新手,我想知道如何制作一个只接受数字的文本框。 因此,如果您输入十进制数字,那将没有问题,但是当您输入其他内容时,“0,1,2,3,4,5,6,7,8,9 或”我希望将其删除文本框。 我认为 KeyDown 或 TextChanged 是可能的。

这是我已经尝试过的:

private void txt2011_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
    {
        if (!System.Text.RegularExpressions.Regex.IsMatch("^[0-9]", txt2011.Text))
        {
            txt2011.Text = "0";
        }
    }

提前致谢

【问题讨论】:

  • -1(注意-)或1e+2(指数符号中的100)或1,2,3(注意两个逗号)怎么样?跨度>
  • 我发现在输入时进行验证 经常让用户感到厌烦,而且很难做到正确。也许您可以改用Leave 事件来验证该字段? (也许更改背景颜色或显示消息以表明它无效?)

标签: c# numbers decimal


【解决方案1】:

虽然NumericUpDown是一个不错的选择,但你毕竟想要一个文本框,对吧?

这里是一般指南。首先您需要订阅文本框的TextChanged 事件。这可以通过双击设计器中的文本框来完成。当事件发生时,您要检查文本框的文本。如果是空字符串,直接返回。现在您可以尝试将文本转换为双精度。如果无法转换,请将文本设置为原始文本。

您可能希望在类中的某处有一个originalText 变量。如果转成double成功,则将原文设置为文本。

try {
    Convert.ToDouble(textbox1.Text);
} catch (NumberFormatException) {
    textbox1.Text = originalText;
    return;
}
originalText = textbox1.Text;

现在应该可以了!

【讨论】:

    【解决方案2】:

    KeyDownText Changed 事件将在您开始在 TextBox 中写入时触发。在这种情况下,您甚至不会看到您输入的文本,因为一旦文本框内的文本发生更改,相应的操作就会发生。

    最好使用LostFocus 事件,因为它只会在用户离开该文本框时触发,然后您可以突出显示它并将文本替换为 0。

    【讨论】:

      猜你喜欢
      • 2013-12-19
      • 2016-01-10
      • 1970-01-01
      • 2019-04-22
      • 2013-04-23
      • 1970-01-01
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多