将文本框与其他文本框相加wpf C#

k5ifujac  于 2022-11-18  发布在  其他
关注(0)|答案(2)|浏览(233)

我有一个wpf表单,有3个文本框,我应该写多少票,然后我想乘以一个值,在结束时,我有另一个文本框,我想从3个文本框的总和,即使只有1有值
我试过这样做:

private void textBox1_TextChanged(object sender, EventArgs e)
 {
  if (!string.IsNullOrEmpty(textBox1.Text) && !string.IsNullOrEmpty(textBox2.Text))
  textBox3.Text = (Convert.ToInt32(textBox1.Text) + Convert.ToInt32(textBox2.Text)).ToString();
 }

 private void textBox2_TextChanged(object sender, EventArgs e)
 {
  if (!string.IsNullOrEmpty(textBox1.Text) && !string.IsNullOrEmpty(textBox2.Text))
  textBox3.Text = (Convert.ToInt32(textBox1.Text) + Convert.ToInt32(textBox2.Text)).ToString();
 }

不能让它工作请帮助

8fsztsew

8fsztsew1#

要将字符串值转换为整数值,可以使用int.Parse方法。另一方面,此方法(也称为Convert.ToInt32)要求您确保字符串的格式始终正确,以便进行转换。如果您不确定和/或知道字符串的格式可能不正确,则可以使用int.TryParse方法,该方法返回true/false值。说明转换是否成功,如果成功,则给出所需的值。如果失败,则得到默认值- 0。
如果所有文本框都遵循相同的过程,则只能创建一个TextChanged事件并将其绑定到所有文本框。

private void textBox1_TextChanged(object sender, EventArgs e)
    {
        int sum = 0;
        if (!string.IsNullOrEmpty(textBox1.Text) && int.TryParse(textBox1.Text, out int gold_ticket_count))
        {
          sum += 120 * gold_ticket_count;
        }
        if (!string.IsNullOrEmpty(textBox2.Text) && int.TryParse(textBox2.Text, out int silver_ticket_count))
        {
          sum += 60 * silver_ticket_count;
        }
        if (!string.IsNullOrEmpty(textBox3.Text) && int.TryParse(textBox3.Text, out int big_show_ticket_count)) 
        {
          sum += 500 * big_show_ticket_count;
        }
        // do smth with the sum...
    }

检查我是否正确命名了textBoxes。给予你的控件一个有意义的名字是一个很好的练习。
int.Parse文档:https://learn.microsoft.com/en-us/dotnet/api/system.int32.parse?view=net-6.0int.TryParse文件:https://learn.microsoft.com/en-us/dotnet/api/system.int32.tryparse?view=net-6.0

vof42yt1

vof42yt12#

一个丑陋、快速、肮脏但有效的解决方案:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private int sum1;
    private int sum2;
    private int sum3;
    private int overallSum;

    private void tb1_TextChanged(object sender, TextChangedEventArgs e)
    {
        if (int.TryParse(tb1.Text, out int tb1Value))
            sum1 = tb1Value *   120;
        else
            sum1 = 0;

        sum_1.Text = sum1.ToString();
        RecalcOverallSum();
    }

    private void tb2_TextChanged(object sender, TextChangedEventArgs e)
    {
        if (int.TryParse(tb2.Text, out int tb1Value))
            sum2 = tb1Value * 120;
        else
            sum2 = 0;
     
        sum_2.Text = sum2.ToString();
        RecalcOverallSum();
    }

    private void tb3_TextChanged(object sender, TextChangedEventArgs e)
    {
        if (int.TryParse(tb3.Text, out int tb1Value))
            sum3 = tb1Value * 120;
        else
            sum3 = 0;
     
        sum_3.Text = sum3.ToString();
        RecalcOverallSum();
    }

    private void RecalcOverallSum()
    {
        overallSum = sum1 + sum2 + sum3;
        overall_sum.Text = overallSum.ToString();   
    }
}

顺便说一句:我建议使用MVVM而不是代码隐藏,但我知道这不是问题所在

相关问题