文本框空问题

时间:2011-08-20 23:59:38

标签: c# textbox null

所以基本上我正在尝试制作一个Windows Form Application来计算4个测试等级的平均值。但是,在某些课程中,我可能只有3个测试。如果没有所有四个测试文本框中的值,程序将无法计算平均值。我试图想出一种代码的方法,如果第四个文本框中没有任何内容,只需忽略它并计算其他3.我的代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace GradeCalc
{
    public partial class Grades : Form
    {
        public Grades()
        {
            InitializeComponent();
        }

        private void Submit_Click(object sender, EventArgs e)
        {
            double test1;
            double test2;
            double test3;
            double test4;
            double average4;
            double average3;

            //Here, I'm trying to achieve:
            //if (t4 is empty)
            //{find the average of the first 3 textboxes}

            if (t4.Text == null)
            {
                test1 = double.Parse(t1.Text);
                test2 = double.Parse(t2.Text);
                test3 = double.Parse(t3.Text);
                average3 = ((test1 + test2 + test3) / 3);
                tavg.Text = average3.ToString("00.00");
            }
                //Here, I'm trying to achieve:
                //if (t4 is not empty)
                //{ calculate the average of all 4 textboxes}

            else
                if (t4.Text != null)
                {
                    test1 = double.Parse(t1.Text);
                    test2 = double.Parse(t2.Text);
                    test3 = double.Parse(t3.Text);
                    test4 = double.Parse(t4.Text);
                    average4 = ((test1 + test2 + test3 + test4) / 4);
                    tavg.Text = average4.ToString("00.00");
                }
        }
    }
}

我对C#没有太多经验,所以感谢任何帮助。

5 个答案:

答案 0 :(得分:3)

尝试String.IsNullOrEmpty(t4.Text)

答案 1 :(得分:2)

试试这个:

List<double> MyValues = new List<double>;

double T;

if ( double.TryParse ( t1.Text, out T) )
     MyValues.Add (T);

if ( double.TryParse ( t2.Text, out T) )
     MyValues.Add (T);

if ( double.TryParse ( t3.Text, out T) )
     MyValues.Add (T);

if ( double.TryParse ( t4.Text, out T) )
     MyValues.Add (T);

if ( MyValues.Count > 0 )
     tavg.Text = MyValues.Average ().ToString ("00.00");

上面的代码是健壮的......如果任何文本(t1-t4)不是有效数字,则跳过它......计算正确值的平均值(无论是1,2,3还是4)只...并且它处理了没有输入有效值的情况......

您可以轻松修改它,要求输入至少3个有效数字,例如将最后if更改为if ( MyValues.Count > 3 )

答案 2 :(得分:0)

第四个文本框的内容可能不是null,而只是一个空字符串。您可以使用String.IsNullOrEmpty()而不是与null的比较来覆盖所有角度。但是,如果有人放入某个空间或其他什么东西呢。你可能也希望删除空格。

完全替代方法是使用TryParse方法而不是Parse - 然后使用返回的成功布尔值来确定您有多少结果。 TryParse的工作原理如下:

if (Double.TryParse(t4.Text, out test4))
{
   // this works
}
else
{
   // this did not
}

答案 3 :(得分:0)

您可以通过分离要执行的各种任务来改进代码。最初,您要解析文本框中的数字。你可以使用一个函数来做到这一点:

IEnumerable<Double> ParseValues(IEnumerable<TextBox> textBoxes) {
  foreach (var textBox in textBoxes) {
    Double value;
    if (Double.TryParse(textBox.Text, out value))
      yield return value;
  }
}

此函数将采用TextBox个对象的输入序列,并生成Double值的输出序列,跳过包含无效值的所有文本框。

然后您可以使用此功能计算平均值:

var values = ParseValues(new[] { t1, t2, t3, t4 });
if (values.Any()) {
  var average = values.Average();
  tavg.Text = average.ToString("00.00");
}

如果任何或所有文本框都包含有效值,此代码将计算平均值。

答案 4 :(得分:0)

查看讨论TryParse的其他答案或文本框的内容。这只是对这些内容的注释。

FWIW,我有帮助功能,让生活更轻松,例如:

double? AsDouble (string str) {
  double value;
  if (double.TryParse(str, out value))
    return value;
  } else {
    return null;
  }
}

然后它就像:

一样简单
double val = AsDouble(txt.Text) ?? 0;

(其中0是默认的数字。)

快乐的编码。