在WinForms中作为优先级处理/捕获按钮单击事件
这是我在Windows窗体应用程序中拥有的子窗口的模型 当在父窗口上单击按钮时,将显示此信息 打开子窗体时,焦点位于文本框1中 当用户从文本框1中取出标签或单击任何按钮时,文本框1上的“离开”事件将触发。 这将触发验证:在WinForms中作为优先级处理/捕获按钮单击事件,winforms,Winforms,这是我在Windows窗体应用程序中拥有的子窗口的模型 当在父窗口上单击按钮时,将显示此信息 打开子窗体时,焦点位于文本框1中 当用户从文本框1中取出标签或单击任何按钮时,文本框1上的“离开”事件将触发。 这将触发验证: if(String.IsNullOrEmpty(textBox1.Text) { MessageBox.Show("Please enter a value of Id."); } else { ... other logic omitted f
if(String.IsNullOrEmpty(textBox1.Text)
{
MessageBox.Show("Please enter a value of Id.");
}
else {
... other logic omitted for brevity
}
现在,用户还可以单击“取消”按钮退出表单,而无需执行任何操作
在这里,在第一次尝试时,Leave事件会激发,因为当加载表单时,焦点位于文本框1中,因此当用户第一次单击Cancel时,表单不会关闭,而是显示带有验证消息的消息框。
在第二次单击时,由于焦点不再在文本框1上,因此“离开”事件不会触发,窗体将关闭
我可以将焦点放在任何其他控件上来处理这个问题,但为了用户体验,我不得不将焦点放在Textbox1上,因为它的值决定了Textbox2中显示的内容的进一步逻辑(Textbox1可以保留为空,在这种情况下,Textbox2中没有显示任何内容,但这与此问题无关)
尝试此操作以查看是否可以在Textbox1的Leave事件中获得Cancel按钮:
Button b = sender as Button
单击“取消”时,b为空
在不触发休假事件的情况下,如何使取消单击生效
提前感谢,,
关于。如果您只想在“取消”按钮接收焦点时取消错误消息,只需在“离开”事件中检查“取消”按钮.Focused标志,然后在“取消”按钮获得焦点时阻止消息
尽管如此,如果不需要模态对话框,通常认为避免模态对话框是良好的做法。因此,根据您的具体情况,您可能会决定用
工具提示替换消息框
,这不会完全阻止UI线程。当您单击保存
按钮而不是离开
事件时,验证输入。此外,使用ErrorProvider
而不是消息框。不要使用Leave,验证事件是为此创建的。将“取消”按钮的CausesValidation属性设置为false。