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