如何打破事件方法的执行

时间:2012-08-22 13:25:17

标签: c# event-handling

我有一个这样的事件处理方法:

private void btnConfirm_Click(object sender, EventArgs e)
{
//Some code
if (int.TryParse(tboxPhone.Text, out n))
    {
     korisnik.Phone = n;
     command.Parameters.AddWithValue("@phone", korisnik.Phone);
    }
    else
    {
     MessageBox.Show("Error. Numerals only!");
     return;
    }
//Some other code if condition is fulfilled
}

问题是不仅从方法中断,而且从整个表格中断。我可以忍受这个,但它不是最好的解决方案。还有其他方法可以解决这个问题吗?

3 个答案:

答案 0 :(得分:0)

完全摆脱return

private void btnConfirm_Click(object sender, EventArgs e) 
{ 
    //Some code 
    if (int.TryParse(tboxPhone.Text, out n)) 
    { 
        korisnik.Telefon = n; 
        command.Parameters.AddWithValue("@phone", korisnik.Telefon); 
        //Some other code if condition is fulfilled 
    } 
    else 
    { 
        MessageBox.Show("Error. Numerals only!");  
    } 
} 

答案 1 :(得分:0)

你应该在keypress上进行数字验证。这样你的代码永远不会进入'else',这是同时处理验证的更好方法。

private void tboxPhone_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!char.IsControl(e.KeyChar) 
        && !char.IsDigit(e.KeyChar) 
        && e.KeyChar != '.')
    {
        e.Handled = true;
    }
}

同样是正则表达式:

private void tboxPhone_KeyPress(object sender, KeyPressEventArgs e)
{
     if (!System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), "\\d+"))
          e.Handled = true;
}

希望这有帮助。

答案 2 :(得分:0)

我刚刚看到了什么问题。 if语句位于try-catch块内,当它返回时,它会直接转到finally块。

我刚从Close();块转移了finally,现在它运行正常。