如何防止C#中的无效输入崩溃

时间:2013-08-21 23:07:09

标签: c# .net winforms error-handling int

我做了一个简单的应用程序,将2个数字加在一起但是当我将两个字母加在一起或无效符号时,它会使程序崩溃。当有人插入信件时,如何创建一个显示“请输入数字”的消息框

这是我的代码:

public partial class frmAdd : Form
{
    string first;
    string second;
    public frmAdd()
    {
        InitializeComponent();
    }

    private void btnFirst_Click(object sender, EventArgs e)
    {
        first = txtNumber.Text;
    }

    private void btnSecond_Click(object sender, EventArgs e)
    {
        second = txtNumber.Text;
    }

    private void btnResult_Click(object sender, EventArgs e)
    {
        int a = Convert.ToInt32(first);
        int b = Convert.ToInt32(second);
        int c = a + b;
        txtResult.Text = c.ToString();
    }
}

4 个答案:

答案 0 :(得分:2)

改为使用TryParse

private void btnResult_Click(object sender, EventArgs e)
{
    int a, b;
    if (int.TryParse(first, out a) && int.TryParse(second, out b))
    {
        int c = a + b;
        txtResult.Text = c.ToString();
    } 
    else
    {
        MessageBox.Show("Invalid Input!");
    }
}

或许更好的方法是在用户首次输入数据时捕获错误:

public partial class frmAdd : Form 
{ 
    int first;   // changed to int
    int second;

    private void btnFirst_Click(object sender, EventArgs e)
    {
        if (!int.TryParse(txtNumber.Text, out this.first))
        {
            MessageBox.Show("Invalid Input!");
        }
    }

    private void btnSecond_Click(object sender, EventArgs e)
    {
        if (!int.TryParse(txtNumber.Text, out this.second))
        {
            MessageBox.Show("Invalid Input!");
        }
    }

    private void btnResult_Click(object sender, EventArgs e)
    {
        int c = first + second;
        txtResult.Text = c.ToString();
    }
}

答案 1 :(得分:2)

您可以使用NumericUpDown控件而不是TextBox - 它不允许用户输入无效数据。

或者您可以在用户输入内容后向TextBox值添加验证。将ErrorProvider添加到您的表单中。并订阅Validating文本框txtNumber事件。当文本框失去焦点时,将发生此事件。如果输入的文本不是整数,则会在texbox附近显示错误,并且不会点击您的按钮:

private void txtNumber_Validating(object sender, CancelEventArgs e)
{
    int value;
    if (!Int32.TryParse(txtNumber.Text, out value))
    {
        errorProvider1.SetError(txtNumber, "Value is not an integer");
        return;
    }

    errorProvider1.SetError(txtNumber, "");
    first = value; // it's better to save integer value than text
}

验证如下:

enter image description here

答案 2 :(得分:0)

您可以添加一些验证,以检查是否可以从传入的int值创建stringint.TryParse是一种简单的方法。

对于MessageBox,您可以使用MessageBox calss

示例:

private void btnResult_Click(object sender, EventArgs e)
{

    int a = 0;
    int b = 0;
    if (!int.TryParse(first, out a))
    {
        MessageBox.Show("first is not a number");
        return;
    }
    if (!int.TryParse(second, out b))
    {
        MessageBox.Show("second is not a number");
        return;
    }
    int c = a + b;
    txtResult.Text = c.ToString();
}

答案 3 :(得分:0)

您可能实际使用Int32.tryParse(String,out int),而不是使用Convert.ToInt32(string),如下所示:

int a, b;

a = Int32.tryParse(first, out a);
b = Int32.tryParse(second, out b);

如果转换失败,则tryParse方法将导致零。如果成功,它将为您提供在字符串中找到的数字。

希望它能帮助你,在C#的前几天也必须找到它。