按钮单击事件 C#
本文关键字:事件 单击 按钮 | 更新日期: 2023-09-27 18:36:31
所以我有一个Windows表单,其中包含几个字段来接受数据并写入SQL数据库。我的button_click事件是处理除验证用户输入之外的所有工作。这些是通过单独的方法处理的。我的问题是,如果用户输入不正确,如何在显示消息框后重置表单?也许只是使用按钮单击事件来启动一个单独的方法,以便我可以更好地控制它?
private void enter_button_Click(object sender, EventArgs e)
{
restart:
try {
try {
Validate(fname);
Validate(lname);
Validate(city);
Validate(state);
} catch (Exception ex) {
MessageBox.Show(ex.Message);
if (ex != null) {
fname.Clear();
lname.Clear();
city.Clear();
state.Clear();
goto restart;
}
}
try {
exValidate(address);
} catch (Exception ex1) {
MessageBox.Show(ex1.Message);
if (ex1 != null) {
address.Clear();
goto restart;
}
}
//blah blah...write to database.
}
// ...
}
按钮点击的逻辑太多了。就个人而言,我宁愿验证每个领域失去的重点。如果你不想这样做,那么创建一个像bool ValidateForm()这样的方法,并将所有的验证逻辑包装在那里。如果至少一个内部验证失败,则返回 false。还要创建一个像void ClearForm()这样的方法,您可以在其中包装所有逻辑以清除所有字段。请记住,模块化代码总是好的,以便您可以重用逻辑,在这里您将清晰和验证逻辑绑定到特定事件(按钮单击)。
所以在输入点击你想要
if(!ValidateForm())
{
MessageBox.Show("Invalid Form");
ClearForm();
return;
}
SaveForm();
我强烈建议根本不使用GOTO说明!!这是一种非常危险的做法,可能会将您的代码变成意大利面条的噩梦。
希望这有帮助。
我的建议是使用后台工作线程来处理逻辑,并且只让后台工作线程由button_click触发。这样,如果用户出错,您可以终止后台工作线程,并通过button_click重新启动整个过程。
来源:
如何在线程结束之前禁用控件
http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx
你的代码有很多问题。为什么要在MessageBox
中显示后检查是否ex!=null
?使用 goto 标签在 C# 中并不标准。
嵌套尝试也不好。稍微分离一下您的代码,就像有一个单独的函数来负责验证数据一样。您的按钮单击处理程序不必执行所有这些工作。因此,您将拥有一个负责验证逻辑的validate()
函数和一个clearForm()
。
这基本上可以解决按钮单击处理程序中的所有混乱,并且只需执行以下操作
:if (validate())
//save to db
else
clearForm()
此外,您应该重新考虑您的设计,函数应该仅在确实需要时才引发异常。是否需要因为一个表单输入格式无效而引发异常?
只需删除goto
s。并让用户修复错误的条目。完成后,他将再次单击按钮。如果你去restart:
你可能会陷入无休止的循环。
如果在发生错误时清除所有字段,则用户必须重新输入所有字段。只需告诉他哪些字段是错误的以及为什么,这样他就可以修复错误的条目,并且可以在修复问题时单击按钮。
顺便说一句,使用goto
真的很丑陋。仅在非常非常罕见的情况下使用它!
if (MessageBox.Show(Exception.Message) == System.Windows.Forms.DialogResult.OK)
{
//Clear all needed controls here
}