繁体   English   中英

将焦点设置到上一个控件

[英]Setting focus to previous control

我遇到拆分器面板失去控制的问题,需要重新设置。

我的应用程序使用SplitContainer; 当我的控件将数据加载到拆分器的panel2中时,焦点转移到了panel1上。

在两个面板中都有tabStop = true的控件,因为tab和shift + tab都需要在面板和拆分器上都起作用。

要重新设置它,请在GotFocus中添加一个Panel2控制控件对象,并在panel1的_enter中使用此对象将焦点重新设置在panel2中。 但是,我需要重设此控制对象。 我无法在panel2的_leave中执行此操作,因为在设置后退控件时,将再次调用GotFocus。

我认为您应该实现这些行为的状态管理,以同步控件的事件。 例如,您可以使用一些与控件对象的状态相关的标志,然后在GotFocus事件中通过一些测试验证它们的值...



在清除注释后进行更新。

在有关控件的焦点相关事件的Msdn上,您发现“ Enter”事件始终是事件链中的第一个事件,第二个始终是“ GotFocus”。 请参阅: https : //msdn.microsoft.com/it-it/library/system.windows.forms.control.gotfocus(v=vs.110).aspx

您可以在“ Enter”事件中评估控件焦点状态变量,并在“ GotFocus”事件中对其进行分配,从而避免在请假事件中重置任何内容。

这样,您应该始终了解先前的控件集中在每个控件的“输入”处理程序中(可以对所有控件使用相同的处理程序)并提出您的要求。

如果您需要在多个面板中管理一些拆分的控件,则还可以实现一个字典,该词典将控件所关注的每个面板映射起来,因此,如果您从一个面板切换到另一个面板,您可能总是会知道该面板中具有焦点的最后一个控件。

我尝试了多种解决方案,并且最安全的选项似乎是在panel2中的控件获得焦点时关闭panel1控件上的选项卡控件,并在它离开焦点时重新打开它。 这样可以确保应用程序重点不会转移到panel1上。 这还将确保我的控件可以进行制表和shift_tabbing操作。 强制将焦点设置回panel2中的控件会多次触发gotfocus(),这超出了目的

暂无
暂无

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

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