2

我制作了一个简单的应用程序来将 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

4 回答 4

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();
    }
}
于 2013-08-21T23:12:01.337 回答
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
}

验证看起来像:

在此处输入图像描述

于 2013-08-21T23:13:03.637 回答
0

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

而对于MessageBox你可以只使用MessageBoxcalss

例子:

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();
}
于 2013-08-21T23:14:06.353 回答
0

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

int a, b;

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

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

希望它对您有所帮助,在我使用 C# 的前几天也必须找到它。

于 2013-08-21T23:15:51.517 回答