【问题标题】:C# WinForms - Adding two textbox automaticallyC# WinForms - 自动添加两个文本框
【发布时间】:2016-11-18 03:52:29
【问题描述】:

我正在构建这三个文本框,如果两个文本框被填充,那么当我输入 10 + 10 时,将显示总和。结果是 1010。有人可以帮我解决这个问题吗?

这是我的代码:

public void textBoxTranspo_TextChanged(object sender, EventArgs e) 
{
    if (!string.IsNullOrEmpty(textBoxTranspo.Text) && !string.IsNullOrEmpty(textBoxDaily.Text))
        textBoxTotalAmount.Text = (Convert.ToInt32(textBoxTranspo.Text) + Convert.ToInt32(textBoxDaily.Text).ToString());
}

public void textBoxDaily_TextChanged(object sender, EventArgs e)
{   
    if (!string.IsNullOrEmpty(textBoxTranspo.Text) && !string.IsNullOrEmpty(textBoxDaily.Text))
        textBoxTotalAmount.Text = (Convert.ToInt32(textBoxTranspo.Text) + Convert.ToInt32(textBoxDaily.Text).ToString());
}

【问题讨论】:

标签: c# .net winforms int type-conversion


【解决方案1】:

这是+ 运算符的魔力(多态性)。如果操作数是数字类型(int,long,double),它将添加两个操作数的值,如果它们是字符串类型,甚至是一个字符串和第二个整数(就像你的情况一样),它将连接两个操作数。在您的情况下,转换后的.ToString() 会产生问题。通过从该行中删除它,您将获得预期的结果。

附加说明:如果输入文本不可转换,Convert.ToInt32 将抛出 FormatException,因此必须使用 int.TryParse 将文本转换为整数。所以代码看起来像这样:

int intTranspo=0,intBoxDaily=0;

if(int.TryParse(textBoxTranspo.Text,out intTranspo) && int.TryParse(textBoxDaily.Text,out intBoxDaily))
   textBoxTotalAmount.Text = (intTranspo + intBoxDaily).ToString();

【讨论】:

  • 您好,我理解您的回答并感谢您,但就像您所说的一样,我尝试删除您所说的.ToString(),但它说Cannot implicitly convert type 'int' to 'string' 但是,总的来说,它就像一个魅力!谢谢
  • 但是,我真的要把int intTranspo=0,intBoxDaily=0; 放在两个不同的public void 中吗?这不是多余的还是它就是这样?
  • 是的,您必须在使用前声明这些变量。由于您将它们作为输出参数传递给 TryParse 方法。
【解决方案2】:

删除语句末尾的toString

textBoxTotalAmount.Text = (Convert.ToInt32(textBoxTranspo.Text) + Convert.ToInt32(textBoxDaily.Text))

【讨论】:

    【解决方案3】:

    也许应该是:

    textBoxTotalAmount.Text = (Convert.ToInt32(textBoxTranspo.Text) + Convert.ToInt32(textBoxDaily.Text)).ToString();
    

    【讨论】:

    • 注意添加一些解释,为什么会这样,为什么不是 OP 的
    【解决方案4】:

    为避免混淆,首先尝试将文本框的值转换为int,成功则放入各自的变量中,否则输出无效提示。

    int input1 = 0;
    int input2 = 0;
    
    try
    {
        input1 = Convert.ToInt32(textBoxTranspo.Text);
        input2 = Convert.ToInt32(textBoxDaily.Text); 
        ans = input1 + input2;
    
    
        if (!string.IsNullOrEmpty(textBoxTranspo.Text) && !string.IsNullOrEmpty(textBoxDaily.Text))
        {
            textBoxTotalAmount.Text = ans.ToString();
        }
    
    }
    catch (Exception)
    {
        textBoxTotalAmount.Text = "Invalid input";
    }
    

    【讨论】:

      【解决方案5】:

      这样做:

      int ans = 0;
      ans = Convert.ToInt32(textBoxTranspo.Text) + Convert.ToInt32(textBoxDaily.Text);
      textBoxTotalAmount.Text = ans.ToString();
      

      编辑:

      这只是创建干净/整洁且更易读的代码的一种方式。别人是这样回答的

      textBoxTotalAmount.Text = (Convert.ToInt32(textBoxTranspo.Text) + Convert.ToInt32(textBoxDaily.Text)).ToString();
      

      也是正确的,但如果其他程序员会阅读代码,我写的第一个代码更具可读性,在这种情况下效率更高。

      你得到 1010 是因为你放错了.ToString()

      【讨论】:

      • 注意添加一些解释,为什么会这样,为什么不是 OP 的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多