C#忽略空文本框

时间:2016-11-14 11:43:47

标签: c# winforms

我有一个textboxes的WinForms应用程序。 目前应用程序很简单,我只想测试它是如何工作的。 它将来会变得更加复杂。 我试图创建一个规则来忽略空textboxes或如果为空则使用值0。 我的代码就是这个:

    decimal ata;
    decimal a1;
    decimal a2;
    decimal a3;
    decimal a4;
    decimal a5;
    decimal j = 0;

    a1 = decimal.TryParse(textBox1.Text, out j);
    a2 = decimal.Parse(textBox2.Text);
    a3 = decimal.Parse(textBox4.Text);
    a4 = decimal.Parse(textBox10.Text);
    a5 = decimal.Parse(textBox24.Text);
    ata = a1 + a2 + a3 + a4 + a5;

resposta.Text = ata.ToString();

我收到错误“无法将类型'bool'隐式转换为'decimal' 在行:

 a1 = decimal.TryParse(textBox1.Text, out j);

任何人都可以帮我解决这个问题。

提前致谢,

8 个答案:

答案 0 :(得分:2)

使用decimal.TryParse(textBox1.Text, out j);代替a1 = decimal.TryParse(textBox1.Text, out j);。您的值将在j

中返回

答案 1 :(得分:0)

你宣布了

decimal a1;

然后你试过了:

a1 = decimal.TryParse(textBox1.Text, out j);

decimal.TryParse返回bool而不是小数

j

正在获取解析后的值

答案 2 :(得分:0)

TryParse方法返回bool值以指示转换是否成功。实际值在第二个参数(out参数)中返回。

你可以尝试:

if (Decimal.TryParse(textBox1.Text, out j))
   a1 = j;

如果解析成功,则仅设置a1。否则a1会保留其先前的值。

答案 3 :(得分:0)

返回值TryParsebool。它表示转换是否成功。通常你会这样使用它:

decimal j;

if (decimal.TryParse(textBox1.Text, out j))
{
    // here the conversion worked and it is save to use j
}

您检查它是否成功,在这种情况下,您可以使用转换变量的值,否则它将保持null

以下是documentation

对于通过out关键字传递的值,文档说:(s相当于textBox1.Textresult相当于j })

  

当此方法返回时,结果包含十进制数,该数字等于s中包含的数值(如果转换成功),或者如果转换失败则为零。如果s参数为null或String.Empty,不是有效格式的数字,或者表示小于MinValue或大于MaxValue的数字,则转换失败。此参数未初始化传递;结果中最初提供的任何值都将被覆盖。

答案 4 :(得分:0)

您想要使用TryParse()方法的方式是这样的

decimal a1 = 0;
bool parsed = decimal.TryParse(textBox1.Text, out a1);

if(parsed)
{
    //your arithmetic
}
else
{
    //throw error
}

答案 5 :(得分:0)

错误是因为TryParse()返回布尔值,而不是小数。您需要编写显式if语句来测试文本框是否为空。你应该考虑将它包装在一个方法中。

答案 6 :(得分:0)

您正在尝试将 bool 值分配给十进制变量,这是导致此错误的原因。 Decimal.TryParse()将返回bool值,请查看here您可以使用此值来检查解析是否成功。

您将在out参数中得到结果,即j。

答案 7 :(得分:0)

面向对象编程的一个好处是类似情况下代码的可重用性。

你提到过很多次你会使用某种“可以为空的十进制文本框”。为什么不为它创建一个类?你只需要创建一次类,每个需要你的可以为空的十进制文本框的人(特别是你的所有文本框)都可以重用这一个代码。

奖励:如果您需要更改此类文本框的行为,例如在空白时获得黄色背景,则所有特殊文本框的瞬间行为都相同。

  • 为了可以忽略空文本框,您需要一个属性IsEmpty
  • 属性值以小数形式返回文本框的值,如果是IsEmpty
  • 则返回0M
  • 如果不是空的但文字不是小数,你想要返回什么?

    public class MyNullableTextBox:TextBox {     public bool IsEmpty {get {return String.IsNullOrEmpty(base.Text);}}

    public decimal Value
    {
       get
       {
           if (this.IsEmpty)
               return 0M;
           else
           {
               decimal parsedValue;
               bool parsed = Decimal.TryParse(base.Text, out parsedValue);
               if (!parsed)
                   // decide what you want in this case
               else
                   return parsedValue;
            }
        }
    }
    

    }

好消息是,一旦您将此(作为参考)添加到您的解决方案中,就可以在工具箱中找到它并在表单设计器中使用,就像它是常规文本框一样