C# WinForms按钮单击事件和类似事件取决于焦点
我有下一种情况:C# WinForms按钮单击事件和类似事件取决于焦点,c#,winforms,button,focus,tabcontrol,C#,Winforms,Button,Focus,Tabcontrol,我有下一种情况: 有一个带有表单的客户端应用程序 表单包含一些选项卡控件 在TabControl的TabPage上有不同的控件 当用户单击任何控件时,我需要激活作为控件父控件的选项卡页。为此,我使用了一个选项卡页输入事件 当选项卡页面被激活时,我需要向服务器应用程序发出请求,并将焦点放在隐藏的文本框以禁用UI 问题是,当我在另一个选项卡页面上单击按钮时,在选项卡页面输入事件处理程序中,我将注意力集中在隐藏的文本框,似乎按钮单击事件没有足够的时间处理。当我在100毫秒后放入计时器和句柄选项卡页
- 有一个带有
表单的客户端应用程序
包含一些表单
选项卡控件
- 在
的TabControl
上有不同的控件TabPage
- 当用户单击任何控件时,我需要激活作为控件父控件的
。为此,我使用了一个选项卡页
选项卡页
事件输入
- 当
被激活时,我需要向服务器应用程序发出请求,并将焦点放在隐藏的选项卡页面
以禁用UI文本框
选项卡页面
上单击按钮时,在选项卡页面
输入
事件处理程序中,我将注意力集中在隐藏的文本框
,似乎按钮
单击事件没有足够的时间处理。当我在100毫秒后放入计时器和句柄选项卡页面进入事件时,按钮点击事件似乎启动良好。所有控件都会发生同样的情况:CheckBox
不会被选中,RadioButton
也会被选中。我不想使用定时器,因为这不是一个稳定的解决方案
在我聚焦到隐藏的TextBox
之前,我如何让TabPage
处理所有鼠标事件?我尝试使用应用程序.DoEvents()
,但没有任何帮助。您使用了错误的事件来表示您尝试执行的操作的错误控件
Enter
当TabPage
页面成为当前表单的活动控件时,将触发该事件,在某些情况下可能不会发生该事件。相反,您需要使用TabControl
的Selecting
或Selected
事件,这取决于您是否要取消切换到其他选项卡(请参阅Selecting
事件的参数)。在您的情况下,选择
事件更合适,因为在事件完成之前,它不允许切换到所选选项卡(除非您对服务器执行异步请求)。此外,您可能不再需要使用隐藏的文本框
更新
关于对OP的评论,当表单上有2个(或更多)的TabControl
时,如果您想在按下不同TabControl
的任何选项卡中的按钮时得到通知,您可以使用Enter
事件进行TabControl
。使用全局变量存储在Enter
事件中激活的TabControl
,然后向服务器发送激活TabControl
的当前活动选项卡的请求
如果这对您的场景不起作用,那么您需要仔细检查您的工作流程,看看是否可以根据您想要完成的任务进行改进。您使用了一个错误的事件来完成您试图执行的任务。相反,请使用选择
或所选
事件的选项卡控件
,具体取决于您是否希望出于任何原因取消更改选项卡。谢谢,但这不符合我的需要<代码>选择
或所选
选项卡控件的事件
在不更改活动页面时不会被触发。假设焦点在一个TabControl
中,我按下另一个TabControl
的活动TabPage
的按钮。然后,活动页面将全部更改,但选择的事件当然不会触发。您是说嵌套在另一个TabControl
中的TabControl
还是多个TabControl
s并排?多个,并排。然后我的答案仍然适用,但您需要使用Enter
和Leave
事件TabControl
s,以便在从一个更改到另一个时收到通知。您可以在上面看到我的评论。我需要一个事件,这意味着所有表单的活动页面都已更改。谢谢,@LightBulb,但我无法在选项卡控件的输入事件中生成服务器请求。我会按照你的建议仔细检查我的工作流程。如果其他人还有其他建议,请随时分享:)