【问题标题】:How to limit a textbox to only numbers and a single decimal point on key press event? [duplicate]如何在按键事件中将文本框限制为仅数字和一个小数点? [复制]
【发布时间】:2014-10-22 15:27:58
【问题描述】:

这是我当前的代码,它只接受数字,我应该添加什么以允许小数点后一位?

 private void txtPurchasePrice_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!char.IsNumber(e.KeyChar))
                {
                    e.Handled = true;
                }

【问题讨论】:

  • what should I add to allow one decimal point 使用 NumericUpDown

标签: c# textbox decimal


【解决方案1】:

这对我有用!

  private void txtPurchasePrice_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;
    }
}

【讨论】:

  • 别忘了检查“,”。
  • 忽略“,”字符。文本框只接受数字和一个小数点字符。
  • 当然可以,但小数点并不总是“.”,也可以是“,”。 stackoverflow.com/q/4094179/1061668
  • 哦,你是对的!但是对于我的应用程序有一个限制,即 txtPurchasePrice 只能为 100(最大值),因此不需要“,”字符
  • 我是对的,但出于另一个原因:)。您可以将one thousand 写为1,000.00,但也可以写为1000,00,具体取决于国家和计算机操作系统区域设置。见CultureInfo。这会影响(通常会引发错误:),例如当您尝试解析双精度值时,由于语言环境,它需要特定的分隔符。
【解决方案2】:

尝试将文本框的值解析为数字,如果通过则允许输入,否则不允许。换句话说,不要逐个字符地检查值,而是在添加每个字符后检查整个值。

类似于以下未经测试的代码:

private void txtPurchasePrice_KeyPress(object sender, KeyPressEventArgs e)
{
  e.handled = !Double.tryParse(txtPurchasePrice.text);
}

或者,您可以保留小数位数,如果计数为 1,则拒绝小数。

【讨论】:

  • 这将无法正常工作,因为它查看的是 TextBox 中的最后一个文本,而不是当前文本。
猜你喜欢
  • 2023-03-14
  • 2019-12-08
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多