【问题标题】:C# how to restrict textbox decimal places to 2?C#如何将文本框小数位限制为2?
【发布时间】:2017-09-20 01:06:43
【问题描述】:

我有这个文本框,其中小数位应该只有两位,它可以工作,但之后会禁用后面的空格

  try
        {
            if (string.IsNullOrWhiteSpace(textBox1.Text))
            {
                textBox2.Clear();
            }
            else
            {
                if (Convert.ToDouble(textBox1.Text) > Convert.ToDouble(grandTotal.Text))
                {
                    double change = Convert.ToDouble(textBox1.Text) - Convert.ToDouble(grandTotal.Text);
                    textBox2.Text = change.ToString("#,0.00");
                }
                else if (Convert.ToDouble(textBox1.Text) == Convert.ToDouble(grandTotal.Text))
                {
                    textBox2.Text = "0";
                }
                else
                {
                    textBox2.Clear();
                }
            }
        }
        catch(Exception)
        {

        }

【问题讨论】:

  • 这段代码什么时候执行?尝试探索蒙面文本框?
  • 在这里插入神,教全世界的 C# 程序员不要再做catch (Exception) - 这是一种反模式。

标签: c# textbox decimal


【解决方案1】:

您可以在文本框 KeyPress 事件处理程序上执行此操作:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == '.' && textBox1.Text.Contains('.'))
            e.Handled = true;
        if (char.IsNumber(e.KeyChar) || e.KeyChar == '.')
        {
            if (Regex.IsMatch(
             textBox1.Text,
             "^\\d*\\.\\d{2}$")) e.Handled = true;
        }
        else e.Handled = e.KeyChar != (char)Keys.Back;
    }

基本上它的作用是将小数点限制为两位,还将小数点限制为一位。但是退格键应该仍然可以正常工作。

【讨论】:

    【解决方案2】:

    您还有替代选项,而不是在选定控件 (textBox1) 上进行编码。您可以创建可重用的自定义文本框控制器。这将指导您Decimal Textbox in Windows Forms

    【讨论】:

      猜你喜欢
      • 2014-06-06
      • 2014-07-07
      • 1970-01-01
      • 2016-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多