将两个文本框的值相乘并显示在第三个文本框中

本文关键字:文本 显示 三个 两个 | 更新日期: 2023-09-27 17:51:17

我试图乘2个数字(一个在每个文本框),并显示在另一个文本框当我输入数字时,什么也没发生。textBox8显示2.50,textbox10显示5。

private void textBox8_TextChanged(object sender, EventArgs e)
        {
            Multiply();
        }
        private void textBox10_TextChanged(object sender, EventArgs e)
        {
            Multiply();
        }
        public void Multiply()
        {
            int a, b;
            bool isAValid = int.TryParse(textBox8.Text, out a);
            bool isBValid = int.TryParse(textBox10.Text, out b);
            if (isAValid && isBValid)
                textBox7.Text = (a * b).ToString();
            else
                textBox7.Text = "Invalid input";
        }

将两个文本框的值相乘并显示在第三个文本框中

The numbers in textBox8 are (for example) 2.50, and textBox 10 is 2

2.50为十进制值,不能解析为int

change int.TryParse to decimal.TryParse

 int a, b;
 bool isAValid = int.TryParse(textBox8.Text, out a);
 bool isBValid = int.TryParse(textBox10.Text, out b);

 decimal a, b;
 bool isAValid = decimal.TryParse(textBox1.Text, out a);
 bool isBValid = decimal.TryParse(textBox2.Text, out b);

使用double.TryParse

double a, b;
bool isAValid = double.TryParse(textBox8.Text.Trim(), out a);
bool isBValid = double.TryParse(textBox10.Text.Trim(), out b);
if (isAValid && isBValid)
    textBox7.Text = (a * b).ToString();
else
    textBox7.Text = "Invalid input";

textBox8中的数字为(例如)2.50,textbox10中的数字为2。

Int32.TryParse(String s, out int)重载使用NumberStyle.IntegerCurrentCulture属性。这就是为什么你的2.50失败了,而isAValid将变成false。使用NumberStyle.Integer,您的字符串只能有;

  • 左行空白。
  • 尾随空格。
  • 前导正负号。

这就是为什么isAValid && isBValid将是false(不管isBValid是什么)和else语句工作的原因。

作为解决方案,您可以使用Double.TryParse方法,它使用NumberStyles.Float| NumberStyles.AllowThousandsCurrentCulture,如;

double a;
bool isAValid = Double.TryParse(textBox8.Text, out a);

应该可以:

    private void textBox8_TextChanged(object sender, EventArgs e)
    {
        Multiply();
    }
    private void textBox10_TextChanged(object sender, EventArgs e)
    {
        Multiply();
    }
    public void Multiply()
    {
        float a, b;
        bool isAValid = float.TryParse(textBox8.Text, out a);
        bool isBValid = float.TryParse(textBox10.Text, out b);
        if (isAValid && isBValid)
            textBox7.Text = (a * b).ToString();
        else
            textBox7.Text = "Invalid input";
    }

当然,正如另一个答案所提到的,你可以使用十进制或双精度,这完全取决于你想要的精度:
float:单精度浮点数(32位)。
double:双精度浮点数(64位)。
decimal: 128位浮点。

致以最亲切的问候!