我有一个这样的事件处理方法:
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;
}
希望这能有所帮助。