我有一个这样的事件处理方法:
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
}
问题是不仅从方法中断,而且从整个表格中断。我可以忍受这个,但它不是最好的解决方案。还有其他方法可以解决这个问题吗?
答案 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
,现在它运行正常。