如何用文本框计算并跳过空文本框?

时间:2013-05-14 15:07:00

标签: c# textbox int32

我必须用钱计算,我创建了一些文本框,用户可以输入他有多少1欧元的硬币。 (以及2欧元,5欧元等) 现在我想计算总数,但如果文本框为空,则无法计算它。我已经尝试了一些方法,但它不会起作用,因为程序将自动开始计数每次输入。

为了简短起见,我想在计算过程中跳过空的文本框。

现在我有了这个:

Int32 aa = Int32.Parse(textBox1.Text); // 5 c
Int32 ba = Int32.Parse(textBox2.Text); // 10 c
Int32 ca = Int32.Parse(textBox3.Text); // 20 c
Int32 da = Int32.Parse(textBox4.Text); // 50 c
Int32 ea = Int32.Parse(textBox5.Text); // 1 e
Int32 fa = Int32.Parse(textBox6.Text); // 2 e
Int32 ga = Int32.Parse(textBox7.Text); // 5 e
Int32 ha = Int32.Parse(textBox8.Text); // 10 e
Int32 ia = Int32.Parse(textBox9.Text); // 20 e
Int32 ja = Int32.Parse(textBox10.Text); // 50 e
Int32 ka = Int32.Parse(textBox11.Text); // 100 e
Int32 total = ((aa * 5) + (ba * 10) + (ca * 20) + (da * 50) + (ea * 100) + (fa * 200) + (ga * 500) + (ha * 1000) + (ia * 2000) + (ja * 5000) + (ka * 100000)) / 100;
richTextBox1.AppendText("\r\nTotaal: € " + total.ToString());

但这不起作用,因为有时会有空盒子;)

我希望你能给我一个简单的解决方案。

4 个答案:

答案 0 :(得分:2)

我认为你应该使用这种方法:

    var list = new List<Tuple<TextBox, decimal>>(){
            Tuple.Create(textBox1, 0.05m),
            Tuple.Create(textBox2, 0.1m),
            Tuple.Create(textBox3, 0.2m),
            Tuple.Create(textBox4, 0.5m),
            Tuple.Create(textBox5, 1m),
            Tuple.Create(textBox6, 2m),
            Tuple.Create(textBox7, 5m),
            Tuple.Create(textBox8, 10m),
            Tuple.Create(textBox9, 20m),
            Tuple.Create(textBox10, 50m),
            Tuple.Create(textBox11, 100m),
        };
    decimal sum = list.Sum(tuple =>{ 
        int a = 0;
        int.TryParse(tuple.Item1.Text, out a);
        return a * tuple.Item2;
    });

答案 1 :(得分:2)

我会更改代码,以便您利用集合而不是单独处理这么多类似的变量。

创建一个字典,将每个货币值映射到代表它的文本框:

var mapping = new Dictionary<decimal, TextBox>()
{
    {.05, textBox1},
    {.10, textBox2},
    {.20, textBox3},
    {.50, textBox4},
    {1, textBox5},
    {2, textBox6},
    //...
};

然后你可以得到这些值Where,文本是有效的整数,Sum

int n;
decimal total = mapping.Where(pair => int.TryParse(pair.Value.Text, out n))
    .Sum(pair => pair.Key * int.Parse(pair.Value.Text));

答案 2 :(得分:1)

如果是非数字数据(包括空字符串),您可以使用int.TryParse0加载变量。

int a = 0;
int.TryParse(textBox1.Text, out a);

答案 3 :(得分:1)

您可以使用Int32.TryParse,但可以将其与扩展方法结合使用以清理代码:

public static Int32 NumberOrZero(this string input)
{
    Int32 output = 0;

    if (!string.IsNullOrWhiteSpace(input))
    {
        Int32.TryParse(input, out output);
    }

    return output;
}

然后你可以这样做:

Int32 aa = textBox1.Text.NumberOrZero(); // 5 c
Int32 ba = textBox2.Text.NumberOrZero(); // 10 c
Int32 ca = textBox3.Text.NumberOrZero(); // 20 c
Int32 da = textBox4.Text.NumberOrZero(); // 50 c
Int32 ea = textBox5.Text.NumberOrZero(); // 1 e
Int32 fa = textBox6.Text.NumberOrZero(); // 2 e
Int32 ga = textBox7.Text.NumberOrZero(); // 5 e
Int32 ha = textBox8.Text.NumberOrZero(); // 10 e
Int32 ia = textBox9.Text.NumberOrZero(); // 20 e
Int32 ja = textBox10.Text.NumberOrZero(); // 50 e
Int32 ka = textBox11.Text.NumberOrZero(); // 100 e