Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 忽略空文本框_C#_Winforms - Fatal编程技术网

C# 忽略空文本框

C# 忽略空文本框,c#,winforms,C#,Winforms,我有一个带有一些文本框的WinForms应用程序。 目前这个应用程序很简单,我只想测试一下它是如何工作的。 将来它会变得更加复杂。 我试图做的是创建一个忽略空文本框的规则,如果为空,则使用值0。 我的代码是这样的: decimal ata; decimal a1; decimal a2; decimal a3; decimal a4; decimal a5; decimal j = 0; a1 = decimal.TryParse

我有一个带有一些
文本框的WinForms应用程序。
目前这个应用程序很简单,我只想测试一下它是如何工作的。
将来它会变得更加复杂。
我试图做的是创建一个忽略空
文本框的规则,如果为空,则使用值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);
有人能帮我解决这个问题吗

提前感谢,

您声明

decimal a1;
然后你试着:

a1 = decimal.TryParse(textBox1.Text, out j);
decimal.TryParse
返回布尔值而不是小数

j
正在获取您声明的解析值

decimal a1;
然后你试着:

a1 = decimal.TryParse(textBox1.Text, out j);
decimal.TryParse
返回布尔值而不是小数

j

正在获取解析后的值

使用
decimal.TryParse(textBox1.Text,out j);
而不是
a1=decimal.TryParse(textBox1.Text,out j);
使用
decimal.TryParse(textBox1.Text,out j);
而不是
a1=decimal.TryParse(textBox1.Text,out j)
方法返回一个
bool
值,以指示转换是否成功。实际值在第二个参数(
out
参数)中返回

你可以试试:

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

这仅在解析成功时设置
a1
。否则
a1
保留其先前的值。

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

你可以试试:

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

这仅在解析成功时设置
a1
。否则
a1
保留其以前的值。

返回值
TryParse
是一个
bool
。它指示转换是否成功。通常您会这样使用它:

decimal j;

if (decimal.TryParse(textBox1.Text, out j))
{
    // here the conversion worked and it is save to use j
}
您可以检查它是否成功,在这种情况下,您可以使用转换变量的值,否则它将保持
null

这是你的电话号码

关于通过
out
关键字传递的值,文档中说:(
s
相当于
textBox1。Text
result
相当于
j

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


返回值
TryParse
是一个
bool
。它指示转换是否成功。通常您会这样使用它:

decimal j;

if (decimal.TryParse(textBox1.Text, out j))
{
    // here the conversion worked and it is save to use j
}
您可以检查它是否成功,在这种情况下,您可以使用转换变量的值,否则它将保持
null

这是你的电话号码

关于通过
out
关键字传递的值,文档中说:(
s
相当于
textBox1。Text
result
相当于
j

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


您希望使用
TryParse()
方法的方式如下

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

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

您希望使用
TryParse()
方法的方式如下

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

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

<> >错误是因为<代码> TyPARSESER()/CUT>返回一个布尔值,而不是一个十进制。你需要写显式if语句来测试文本框是否为空。你应该考虑用一个方法来包装它。

错误是因为<代码> TyPARSESER()< /代码>返回一个布尔值,而不是一个十进制。你需要写显式if语句来测试文本框是否为空。你应该考虑用一个方法来包装这个。

你试图把<强>布尔-< /强>值赋给<强>十进制变量< /强>这就是为什么得到这个错误的原因。 Decimal.TryParse()将返回bool值,请查看您可以使用此值检查解析是否成功


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

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


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

面向对象编程的优点之一是代码在类似情况下的可重用性

您提到您将多次使用某种“可为空的十进制文本框”。为什么不为其创建一个类呢?您只需创建一次类,所有需要您的可为空的十进制文本框的人(尤其是您和所有文本框)都可以重用这一代码

额外好处:如果您需要更改此类文本框的行为,例如,当文本框为空时获得黄色背景,则所有特殊文本框的行为都会立即相同

  • 要使忽略空文本框成为可能,您需要一个属性IsEmpty
  • 属性值以十进制形式返回文本框的值,如果为空,则返回0 m
  • 如果文本不是空的但不是小数,您希望返回什么

    公共类MyNullableTextBox:TextBox { public bool IsEmpty{get{return String.IsNullOr