按钮点击事件C#
因此,我有一个Windows窗体,其中有几个字段可以接受数据并写入SQL数据库。我的按钮单击事件处理除验证用户输入之外的所有工作。这些都是通过不同的方法处理的。我的问题是,如果用户的输入不正确,我如何在显示messagebox后重置表单?也许只是使用按钮点击事件来启动一个单独的方法,这样我可以更好地控制它按钮点击事件C#,c#,methods,C#,Methods,因此,我有一个Windows窗体,其中有几个字段可以接受数据并写入SQL数据库。我的按钮单击事件处理除验证用户输入之外的所有工作。这些都是通过不同的方法处理的。我的问题是,如果用户的输入不正确,我如何在显示messagebox后重置表单?也许只是使用按钮点击事件来启动一个单独的方法,这样我可以更好地控制它 private void enter_button_Click(object sender, EventArgs e) { restart: try { try
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指令!!这是一种非常危险的做法,可能会将代码变成意大利面噩梦
希望这有帮助。您的代码有很多问题。为什么要检查
ex=将其显示在消息框中后为空
?使用goto标签在C#中不是标准的
if (MessageBox.Show(Exception.Message) == System.Windows.Forms.DialogResult.OK)
{
//Clear all needed controls here
}
嵌套的尝试也不好。将代码分开一点,例如,使用一个单独的函数,只负责验证数据。您的按钮单击处理程序不必完成所有这些工作。因此,您将拥有一个负责验证逻辑的validate()
函数和一个clearForm()
这将从根本上解决按钮点击处理程序中的所有混乱问题,它只需按照以下方式进行操作:
if (validate())
//save to db
else
clearForm()
此外,您还应该重新考虑您的设计,函数应该只在确实需要时抛出异常。由于一个表单输入的格式无效,是否需要引发异常?只需将转到即可。并让用户修复错误的条目。完成后,他将再次单击按钮。如果您转到重新启动:
,您可能会陷入无休止的循环
如果在发生错误时清除所有字段,则用户必须重新输入所有字段。只要告诉他哪些字段是错误的,为什么是错误的,这样他就可以修复错误条目,并在修复问题时单击按钮
顺便说一下,使用goto
真的很难看。仅在非常罕见的情况下使用 我的建议是使用后台工作线程来处理逻辑,只需单击按钮即可触发后台工作线程。这样,如果用户出错,您可以终止后台工作线程,并通过单击按钮重新启动整个进程
资料来源:
刚刚清除所有文本框后,为什么要立即“重新启动”(重新验证)?顺便说一句,用C#这样的标签不是标准的,也很难阅读。看看计算机科学史的一部分:-)另外,你有太多的尝试。如果您的所有方法都抛出异常,那么您就有一个严重的设计缺陷。抛出异常是特殊情况,用户输入正确的细节并不是一个例外情况。我不想挑剔,但是你可能会考虑不向用户显示实际的异常消息。这会向应用程序的后端提供提示,并会向恶意用户提示攻击系统的方法。相反,记录异常,并给用户一条消息说Ooops有东西坏了。如果你登录到一个SQL表,你可以给他们LogID或你在DB中使用的任何唯一键,这样他们就可以在需要时用它打电话给你的帮助台。记住,不要使用goto。@LukeBerry:如果你想从嵌套循环中断到封闭循环的末尾,我想说使用goto
是合法的。它与使用return
语句相当。当然,您可以在外部循环中重复该条件或使用布尔变量,但这是否会使代码更易于理解?这确实有帮助。在编写了所有这些垃圾代码以使其正常运行之后,我认为点击事件太多了,我应该将点击事件发送给另一个函数。这个答案有点简洁,也许这会让我们了解到:如果你喜欢,请对其进行投票,或者,如果你对这个答案特别满意,勾选它,将其标记为该问题的已接受答案。