[英]WinForms Button Click event and similar events depend on focus
我有下一种情况:
Form
的客户端应用程序 Form
包含一些TabControl
的 TabControl
的TabPage
上有不同的控件 TabPage
。 为此,我使用TabPage
Enter
事件 TabPage
被激活时,我需要向服务器应用发出请求,并将焦点放在隐藏的TextBox
以禁用UI 问题是,当我点击一个Button
上的另一TabPage
,在TabPage
。 Enter
事件处理程序,我将注意力集中在隐藏的TextBox
,似乎Button
click事件没有足够的时间来处理。 当我放置计时器并处理TabPage
。 在100毫秒后Enter
事件, Button
点击事件似乎触发得很好。 所有控件都发生同样的事情: CheckBox
未被选中, RadioButton
也未被选中。 我不想使用计时器,因为这不是一个稳定的解决方案。
有什么想法可以让我在关注隐藏的TextBox
之前使TabPage
处理所有鼠标事件吗? 我尝试使用Application.DoEvents()
,但这没有帮助。
您正在使用错误的事件对要执行的操作进行错误的控制。
当该页面成为当前表单的活动控件时(在某些情况下可能不会发生),将触发TabPage
Enter
事件。 相反,您需要使用TabControl
Selecting
或Selected
事件,具体取决于您是否要取消切换到其他选项卡(请参阅Selecting
事件的TabControlCancelEventArgs
参数)。 在您的情况下, Selecting
event更合适,因为在事件完成之前,除非选择向服务器发出异步请求,否则Selecting
事件将不允许切换到选定的选项卡。 此外,您可能不再需要使用隐藏的TextBox。
UPDATE
关于OP的注释,当表单上有2个(或更多) TabControl
,如果您想在按下另一个TabControl
任何选项卡中的按钮时得到通知,则可以对TabControl
使用Enter
事件。 使用全局变量存储在Enter
事件中激活了哪个TabControl
,然后发送服务器请求以激活该TabControl
的当前活动选项卡。
如果这不适用于您的情况,那么您需要仔细检查您的工作流程,并查看是否可以根据您要完成的工作进行改进。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.