0

文字がない場合に正規表現を試行すると、winforms EnterValue が if ステートメントの後にまだトリガーされています。トリガーの後にそれ以上進まないようにするにはどうすればよいですか?

    private void EnterValue_Click(object sender, EventArgs e)
    {
        if (textBox1.Text != string.Empty && !Regex.IsMatch(textBox1.Text, @"^[0-9]+$"))
        {
            MessageBox.Show("Please only enter numbers");
            textBox1.Clear();
        }

        //convert input to double
        listDouble.Add(Convert.ToDouble(textBox1.Text)); // this line still throws exception
        textBox1.Clear();
        //clear existing items
        listBox1.Items.Clear();
        // clear any existing list items
        for (int i = 0; i < listDouble.Count; i++)
        {
            listBox1.Items.Add(listDouble[i]);
        }
        //for each value added, add this to our list 
    }
4

3 に答える 3

3

メソッドから戻ります。

if (textBox1.Text != string.Empty && !Regex.IsMatch(textBox1.Text, @"^[0-9]+$"))
{
    MessageBox.Show("Please only enter numbers");
    textBox1.Clear();
    return; // nothing after this will execute
}

ifこれは、述語が真の場合にのみ実行され、return;ステートメントがヒットするとすぐにメソッドが返され、他のコードは実行されません。

于 2012-07-28T11:38:39.523 に答える
1

最初のオプションは使用することreturnです:

    if (textBox1.Text != string.Empty && !Regex.IsMatch(textBox1.Text, @"^[0-9]+$"))
    {
        MessageBox.Show("Please only enter numbers");
        textBox1.Clear();
        return; // exit method
    }

2番目のオプションは使用することelseです:

    if (textBox1.Text != string.Empty && !Regex.IsMatch(textBox1.Text, @"^[0-9]+$"))
    {
        MessageBox.Show("Please only enter numbers");
        textBox1.Clear();
    }
    else
    {
        // your statements
    }
于 2012-07-28T11:40:26.990 に答える
1

を使用しDecimal.TryParseます。条件を確認した後に使用returnして、現在のメソッドを終了します。

このreturnステートメントは、そのステートメントが表示されているメソッドの実行を終了し、呼び出し元のメソッドに制御を返します。

Decimal dec;
if (!Decimal.TryParse(textBox1.Text, out dec))
{
    MessageBox.Show("Please only enter numbers");
    textBox1.Clear();
    return;
}
于 2012-07-28T11:45:04.367 に答える