0

2つのテキストボックスを比較して空かどうかを確認しようとしていますが、例外エラーが発生します。

入力文字列は、正しい形式ではありませんでした

コード:

private void btncalc_Click(object sender, EventArgs e)
{
    try
    {
        int ina= int.Parse(txttea.Text);
        int inb= int.Parse(txtcoffee.Text);
        int inc = 0, ind = 0;
        if (this.txttea.Text == "" && this.txtcoffee.Text == "")  // this not working
        {
            MessageBox.Show("select a item");
            txttea.Focus();
        }
        if (cbxwithoutsugar.Checked)
        {
            inc = (ina * 20);
        }
        else
        {
            inc = (ina * 8);
        }
        if (cbxcoldcoffee.Checked)
        {
            ind = (inb * 10);
        }
        else
        {
            ind = (inb * 5);
        }
        txtamount.Text = (Convert.ToInt32(inc) + Convert.ToInt32(ind)).ToString();
    }
    catch (Exception a)
    {
        MessageBox.Show(a.Message);
    }
}
4

5 に答える 5

2

最初にテキストボックスが空であることを確認してから、値を取得してください
また、次のようにString.IsNullOrEmptyを使用します。

    if (String.IsNullOrEmpty(txttea.Text) || String.IsNullOrEmpty(txtcoffee.Text)) 
    {
        MessageBox.Show("select a item");
        txttea.Focus();
    }
    int ina= int.Parse(txttea.Text); // See comment below about TryParse
    int inb= int.Parse(txtcoffee.Text);
    int inc = 0, ind = 0;

また、 Parse の代わりにTryParseを使用します(ホワイトスペースを避けるには、常にトリミングをお勧めします)。

int ina;
if (!Int32.TryParse(txttea.Text.Trim(), out ina))
{
   MessageBox.Show("Value is not a number");
}
于 2013-02-03T09:21:02.273 に答える
2

空白があるとコードが失敗するため、TryParse メソッドを使用してみてください。

int ina =0 , inb =0;

int.TryParse(txttea.Text, out ina);
int.TryParse(txtcoffee.Text, out inb);

if (ina == 0 && this.inb == 0)  // this not working
{

}
于 2013-02-03T09:22:57.293 に答える
1

数値が必要な場合は、TextBox ではなく NumericUpDown を使用することをお勧めします。このようにして、Value を使用してコーヒーと紅茶の数を取得できます。

private void btncalc_Click(object sender, EventArgs e)
{
    try
    {
        int ina= numtea.Value;
        int inb= numcoffee.Value;
        int inc = 0, ind = 0;
        if (ina == 0 && inb == 0)  // this not working
        {
            MessageBox.Show("select a item");
            numtea.Focus();
        }
        if (cbxwithoutsugar.Checked)
        {
            inc = (ina * 20);
        }
        else
        {
            inc = (ina * 8);
        }
        if (cbxcoldcoffee.Checked)
        {
            ind = (inb * 10);
        }
        else
        {
            ind = (inb * 5);
        }
        txtamount.Text = (inc + ind).ToString();
    }    
}

これはユーザーフレンドリーなソリューションです。

于 2013-02-03T09:25:43.247 に答える
0

あなたが「機能していない」と示している行は問題ではないと感じていますが、整数の解析は問題です。例外は、論理テストからスローされる可能性があるものではありませんが、不正な形式の整数解析からスローされる可能性がある例外です。解析行をコメントアウトして、エラーがまだ発生するかどうかを確認してください。

于 2013-02-03T09:20:59.740 に答える
0

最初に、テキスト ボックスのテキストを解析しています。そして、null に対してテキスト値を再度チェックしています。冗長ではありませんか?

テキスト領域のテキストが数値でない場合、解析例外が発生するはずです。メッセージボックスに表示されます。解析された整数の値を記録するログ ステートメントを入力してみることができると思います。

于 2013-02-03T09:22:51.473 に答える