我有下一个情况:
Form
Form
包含一些TabControl
的TabPage
TabControl
有不同的控件
TabPage
。为此,我使用TabPage
Enter
事件TabPage
被激活时,我需要向服务器应用程序发出请求,并将焦点置于隐藏的TextBox
以禁用UI 问题是,当我点击另一个Button
上的TabPage
时,在TabPage
。Enter
事件处理程序中,我将焦点放在隐藏的TextBox
上,似乎Button
点击事件没有足够的时间进行处理。当我在100毫秒后放置计时器并处理TabPage
。Enter
事件时,Button
点击事件似乎被解雇了。所有控件都会发生同样的事情:CheckBox
没有被检查,RadioButton
也是如此。我不想使用计时器,因为这不是一个稳定的解决方案。
在将焦点转移到隐藏TabPage
之前,我怎么能让TextBox
处理所有鼠标事件?我尝试使用Application.DoEvents()
,但这没有帮助。
答案 0 :(得分:1)
您正在使用错误的事件来控制您正在尝试的操作。
当{1}}成为当前表单的活动控件(在某些条件下可能不会发生)时,将激活Enter
的{{1}}事件。相反,您需要使用TabPage
或Selecting
Selected
事件,具体取决于您是否要取消切换到其他标签页(请参阅TabControlCancelEventArgs
{{}}参数1}}事件)。在您的情况下,TabControl
事件会更合适,因为在事件完成之前它不允许切换到选定的选项卡(除非您正在向服务器执行异步请求)。此外,您可能不再需要使用隐藏的TextBox。
<强>更新强>
关于对OP的评论,如果您在表单上有2个(或更多)Selecting
,并且希望在其他Selecting
的任何标签中按下按钮时收到通知,则可以对TabControl
使用TabControl
事件。使用全局变量存储Enter
事件中已激活的TabControl
,然后发送激活TabControl
的当前活动选项卡的服务器请求。
如果这对您的方案不起作用,那么您需要仔细检查您的工作流程,看看它是否可以根据您想要完成的内容进行改进。