winforms - 处理/捕获按钮单击事件作为 WinForms 中的优先级
问题描述
这是我在 Windows 窗体应用程序中拥有的子窗口的模型。
这将在父窗口上单击按钮时显示。
当子窗体打开时,焦点位于 Text box1 中。
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 事件的情况下,我该怎么做才能使“取消”单击起作用?
预先感谢,问候。
解决方案
如果您只想在取消按钮获得焦点时抑制错误消息,只需检查cancelButton.Focused
离开事件中的标志,然后在取消按钮获得焦点时阻止消息。
然而,如果不需要模式对话框,通常认为是一种很好的做法。因此,根据您的具体情况,您可以决定将 替换为MessageBox
a ToolTip
,这不会完全阻塞 UI 线程。
推荐阅读
- swift - 包含日文字符时缺少 TextField 字体样式
- javascript - useState 中的变量未在 useEffect 回调中更新
- javascript - 如何将 PHP 日期转换为 Javascript 日期?
- android - 如何从 KClass 获取 Dagger2 ViewModelFactory 的类?
- python - 如何在pygame中形成天空盒?
- c++ - 如何使用大括号初始化动态数组,例如标准向量或数组?
- mysql - MySQL程序,基于识别号的女性或男性
- java - switch 中的类似情况,差别不大
- ruby-on-rails - Grouped_select:如何在组下显示特定的选择?
- css - 是否可以使用内部的所有控制器更改整个组件的大小(例如调整窗口大小)