繁体   English   中英

WinForms Button单击事件和类似事件取决于焦点

[英]WinForms Button Click event and similar events depend on focus

我有下一种情况:

  • 有一个带有Form的客户端应用程序
  • Form包含一些TabControl
  • TabControlTabPage上有不同的控件
  • 当用户单击任何控件时,我需要激活作为控件父级的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 SelectingSelected事件,具体取决于您是否要取消切换到其他选项卡(请参阅Selecting事件的TabControlCancelEventArgs参数)。 在您的情况下, Selecting event更合适,因为在事件完成之前,除非选择向服务器发出异步请求,否则Selecting事件将不允许切换到选定的选项卡。 此外,您可能不再需要使用隐藏的TextBox。

UPDATE

关于OP的注释,当表单上有2个(或更多) TabControl ,如果您想在按下另一个TabControl任何选项卡中的按钮时得到通知,则可以对TabControl使用Enter事件。 使用全局变量存储在Enter事件中激活了哪个TabControl ,然后发送服务器请求以激活该TabControl的当前活动选项卡。

如果这不适用于您的情况,那么您需要仔细检查您的工作流程,并查看是否可以根据您要完成的工作进行改进。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM