如何中断事件方法的执行



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

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
}

问题是返回不仅从方法中断,而且从整个形式中断。我可以接受这一点,但这不是最好的解决方案。有其他办法解决这个问题吗?

只需完全清除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!");  
    } 
} 

我刚刚看到问题出在哪里。if语句在try-catch块内,当它返回时,它直接转到finally块。

我刚刚从finally块转移了Close();,现在它工作得很好。

您应该在按键时进行数字验证。。这样一来,您的代码就永远不会进入"else",同时处理验证是一种更好的方式。

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

regex也是一种方式:

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

希望这能有所帮助。

相关内容

  • 没有找到相关文章

最新更新