【发布时间】:2021-05-21 06:03:10
【问题描述】:
这是我在 Windows 窗体应用程序中的子窗口的模型。
这将在父窗口上单击按钮时显示。
当子窗体打开时,焦点在文本框1。
Text box1 上的 Leave 事件在用户跳出它或单击任何按钮时触发。 这会触发验证:
if(String.IsNullOrEmpty(textBox1.Text)
{
MessageBox.Show("Please enter a value of Id.");
}
else {
... other logic omitted for brevity
}
现在用户也可以点击取消按钮退出表单而不做任何操作。
在这里,在第一次尝试时,Leave 事件会触发,因为加载表单时焦点位于 Text box1 中,因此当用户第一次单击“取消”时,表单不会关闭,而是带有验证消息的消息框显示。 在第二次单击时,由于焦点不再在 Text box1 上,因此 Leave 事件不会触发并且表单关闭。
我可以将焦点放在任何其他控件上来处理这个问题,但为了用户体验,我不得不将焦点放在 Textbox1 上,因为它的值决定了 Textbox2 中显示的进一步逻辑(Textbox1 可以在在这种情况下,Textbox2 中没有显示任何内容,但这与此问题无关)。
试过这个,看看我是否可以在 Textbox1 的 Leave 事件中获取 Cancel 按钮:
Button b = sender as Button
点击取消时b为NULL。
如何在不触发 Leave 事件的情况下使“取消”单击起作用?
提前致谢, 问候。
【问题讨论】:
-
当您单击
Save按钮而不是Leave事件时验证输入。 -
另外,使用
ErrorProvider而不是消息框。 -
不要使用 Leave,Validating 事件就是为此而设计的。将 Cancel 按钮的 CausesValidation 属性设置为 false。
标签: winforms