2

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ます。このイベントは、テキスト ボックスがフォーカスを失ったときに発生します。入力したテキストが整数でない場合、テキストボックスの近くにエラーが表示され、ボタンはクリックされません:

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

以下に示すように、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 に答える
0

渡され intた値からを作成できるかどうかを確認するために、少し検証を追加できます。これを行う簡単な方法です。stringint.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 に答える