您好,我是这个网站和C#的新手,我试图在VS 2017上构建一个Winforms应用程序,其中包含一个numericUpDown和2个文本框。我需要将文本框1中的值除以numericUpDown控件上的值,然后在文本框2中汇总并显示结果,但要以双精度形式显示。我遇到的问题是,直到我将numericupdown的值向上更改3次之后,什么都没有计算出来,然后汇总结果是错误的。它通过1个值更改关闭。因此,如果我单击nud 3次,并且文本框1上的值是0.28,则应该得到0.09333333的结果,即0.28除以3,但结果却是0.14。如果我单击裸键,看起来它被零除。 numericupdown从0值开始的事实与我的问题有关系吗?运行应用程序时,没有收到任何错误消息或异常。我将不胜感激。请不要对我太苛刻,我在c#中是个超级新手谢谢
这是代码
private void numericUpDown1R2Scrap_ValueChanged(object sender, EventArgs e)
{
double val1 = 0.0;
double val2 = 0.0;
double total = 0.0;
if (!string.IsNullOrEmpty(textBox1WeightSummary.Text) &&
!string.IsNullOrEmpty(numericUpDown1R2Scrap.Text))
{
val1 = double.Parse(numericUpDown1R2Scrap.Text);
val2 = double.Parse(textBox1WeightSummary.Text);
if (val1 != 0)
{
total = val2 / val1;
textBox1RingWeightTotal.Text = total.ToString();
}
答案 0 :(得分:0)
ValueChanged
属性之前引发 Text
:因此,在处理numericUpDown1R2Scrap.Text
时ValueChanged
的内容将过时。请改用Value
属性,该属性将具有最新值。它已经是一个数字类型,因此您也不需要解析它(但是您确实需要强制转换它,因为在使用decimal
时它是double
):
val1 = (double)numericUpDown1R2Scrap.Value;
val2 = double.Parse(textBox1WeightSummary.Text);
答案 1 :(得分:0)
在表单设计器中,将NumericUpDown Minimum
和Value
属性设置为1。这允许从1开始,而不允许下降到0
。
然后,始终检查NumericUpDown.Value
以读取当前值,它是decimal
类型。
使用Decimal.TryParse转换TextBox的数字输入。请注意,默认实现假定您使用的是当前的Culture十进制分隔符。请参阅有关使用InvariantCulture
引用的文档,以在需要时强制使用点作为小数点分隔符和将逗号作为千位分隔符。
private void numericUpDown1R2Scrap_ValueChanged(object sender, EventArgs e)
{
NumericUpDown nUpDown = sender as NumericUpDown;
if (nUpDown.Value == 0) nUpDown.Value = 1;
if (decimal.TryParse(textBox1WeightSummary.Text, out decimal inputValue)) {
textBox1RingWeightTotal.Text = (inputValue / nUpDown.Value).ToString();
}
}
此行: if (nUpDown.Value == 0) nUpDown.Value = 1;
是一种故障保险,以防万一您忘记将NumericUpDown Value
和Minimum
设置为1
设计器(或在Form的构造函数中)。
此行: NumericUpDown nUpDown = sender as NumericUpDown;
,用于检索引发事件的NumericUpdown控件的实例。这样可以将代码重用于任何其他NumericUpDown控件,而无需手动更改引用。
此语法: decimal.TryParse([Some string], out decimal inputValue)
需要C# 7.0+
。
如果使用的是该语言的早期版本,则需要在方法之外声明局部变量:
decimal inputValue = 0m;
if (decimal.TryParse(textBox1WeightSummary.Text, out inputValue)) { ... }
在这一行: (inputValue / nUpDown.Value).ToString();
,您可以更改ToString()格式,指定要使用的小数位数。例如:
(inputValue / nUpDown.Value).ToString("N2");
将输出一个十进制数字,格式设置为仅显示前两个小数位。