if语句后的输入验证

时间:2012-07-28 11:37:05

标签: c# regex winforms

在没有字符的情况下尝试正则表达式时,我的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 
    }

3 个答案:

答案 0 :(得分: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谓词为true时才会执行此操作,并且只要return;语句被命中,该方法就会立即返回,而不会运行任何其他代码。

答案 1 :(得分: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
    }

答案 2 :(得分:1)

使用Decimal.TryParse。检查条件后使用return退出当前方法:

  

return 语句终止它出现的方法的执行,并将控制权返回给调用方法。

Decimal dec;
if (!Decimal.TryParse(textBox1.Text, out dec))
{
    MessageBox.Show("Please only enter numbers");
    textBox1.Clear();
    return;
}