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
    }

第二种选择是使用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 回答