C# 清除文本框时未处理的异常

C# 清除文本框时未处理的异常,c#,winforms,C#,Winforms,可能重复: 我是C和堆栈溢出的新手,所以如果这个问题不合适或在错误的地方,请随意编辑或删除它 我制作了一个简单的计算器,但我有一个问题:当我清除其中一个文本框以输入另一个数字时,会显示一条消息,说明发生了未处理的异常,并选择退出或继续。如何阻止每次清除文本框时显示此消息 private void button1_Click(object sender, EventArgs e) { int value1 = Convert.ToInt32(textBox1.Text); int

可能重复:

我是C和堆栈溢出的新手,所以如果这个问题不合适或在错误的地方,请随意编辑或删除它

我制作了一个简单的计算器,但我有一个问题:当我清除其中一个文本框以输入另一个数字时,会显示一条消息,说明发生了未处理的异常,并选择退出或继续。如何阻止每次清除文本框时显示此消息

private void button1_Click(object sender, EventArgs e)
{
    int value1 = Convert.ToInt32(textBox1.Text);
    int value2 = Convert.ToInt32(textBox2.Text);
    textBox3.Text = sum(value1, value2).ToString();
}

private void textBox1_TextChanged(object sender, EventArgs e)
{
    int vlera1 = Convert.ToInt32(textBox1.Text);
}

private void textBox2_TextChanged(object sender, EventArgs e)
{
    int vlera2 = Convert.ToInt32(textBox2.Text);
}

private void textBox3_TextChanged(object sender, EventArgs e)
{ }

int sum(int value1, int value2) {
    return (value1) + (value2);
}
使用int.TryParsestring s,out int result,而不是Convert.toint32字符串值int fromBase 这是因为您试图将文本框的空数据转换为Int32

使用int.TryParsestring s,out int result,而不是Convert.toint32字符串值int fromBase 这是因为您试图将文本框的空数据转换为Int32

当您尝试将无法转换为int-to-int类型结构的字符串转换为int-to-int时,将收到FormatException。在进行转换之前,您可以始终使用int.TryParsestring s,out-int-result查看字符串是否能够进行int转换

范例

另一个解决方案 您可以始终使用try-catch语句来查看是否从您提供的代码中引发了异常,并在需要时执行某些操作

范例

注意:try-catch语句由一个try块和一个或多个catch子句组成,这些子句为不同的异常指定处理程序

谢谢, 我希望这对您有所帮助:

当您尝试将无法转换为int-to-int类型的结构的字符串转换为int-to-int时,您将收到FormatException。在进行转换之前,您可以始终使用int.TryParsestring s,out-int-result查看该字符串是否能够进行int转换

范例

另一个解决方案 您可以始终使用try-catch语句来查看是否从您提供的代码中引发了异常,并在需要时执行某些操作

范例

注意:try-catch语句由一个try块和一个或多个catch子句组成,这些子句为不同的异常指定处理程序

谢谢,
我希望这对您有所帮助:

为什么要使用vlera1和vlera2?为什么需要它们?@JonSkeet我看到了,但我无法将其与我的问题联系起来@赫克里:为什么不呢?这与问题完全相同:每当文本发生更改时,都会无条件地调用Convert.ToInt32,这与调用int.Parse类似。同样的解决方案也适用。不清楚为什么要在方法中执行转换,然后丢弃结果,但是…@Sirwanafi我想我得到的是用户在texbox中输入的内容,并将其指定为变量vlera1。就像我说的,我是新手,谢谢你的回复。你为什么使用vlera1和vlera2?你为什么需要它们?@JonSkeet我看到了,但我无法将其与我的问题联系起来@赫克里:为什么不呢?这与问题完全相同:每当文本发生更改时,都会无条件地调用Convert.ToInt32,这与调用int.Parse类似。同样的解决方案也适用。不清楚为什么要在方法中执行转换,然后丢弃结果,但是…@Sirwanafi我想我得到的是用户在texbox中输入的内容,并将其指定为变量vlera1。就像我说的,我是新手,谢谢你的回答。谢谢你,拉维德拉·巴格尔,但是当我看到你说的错误时,不能隐式地将类型“bool”转换为“int”。谢谢你,拉维德拉·巴格尔,但是当我看到你说的错误时,不能隐式地将类型“bool”转换为“int”。不,谢谢你。这是非常重要的helpful@hekri我很高兴能帮上忙。祝你有一个愉快的一天:不,谢谢你。这是非常重要的helpful@hekri我很高兴能帮上忙。祝您有个美好的一天:
if (int.TryParse(textBox1.Text, out vlera1))
{
    //assign here    
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
    int x = 0; //Initialize a new int of name x and set its value to 0
    if (int.TryParse(textBox1.Text, out x)) //Check if textBox1.Text is a valid int
    {
        int vlera1 = Convert.ToInt32(textBox1.Text); //Initialize a new int of name vlera2 and set its value to (textBox1.Text as int)
    }
    else
    {
        //DoSomething if required
    }
}

private void textBox2_TextChanged(object sender, EventArgs e)
{
    int x = 0; //Initialize a new int of name x and set its value to 0
    if (int.TryParse(textBox2.Text, out x)) //Check if textBox2.Text is a valid int
    {
        int vlera2 = Convert.ToInt32(textBox2.Text);  //Initialize a new int of name vlera2 and set its value to (textBox1.Text as int)
    }
    else
    {
        //DoSomething if required
    }
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
    try
    {
        int vlera1 = Convert.ToInt32(textBox1.Text); //Initialize a new int of name vlera2 and set its value to (textBox1.Text as int)
    }
    catch (Exception EX)
    {
        MessageBox.Show(EX.Message); //(not required) Show the message from the exception in a MessageBox
    }
}

private void textBox2_TextChanged(object sender, EventArgs e)
{
    try
    {
        int vlera2 = Convert.ToInt32(textBox2.Text);  //Initialize a new int of name vlera2 and set its value to (textBox1.Text as int)
    }
    catch (Exception EX)
    {
        MessageBox.Show(EX.Message); //(not required) Show the message from the exception in a MessageBox
    }
}