将焦点设置为先前的控件

时间:2016-06-21 07:05:51

标签: c# winforms focus splitcontainer

我遇到分离器面板失控的问题,需要将其设置回来。

我的应用程序使用SplitContainer;当我的控制器在分离器的panel2中加载数据时,焦点转移到panel1。

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

要进行设置,请在GotFocus中为panel2控件添加一个Control对象,并在panel1的_enter中使用它来将焦点设置回panel2。但是,我需要重置这个控制对象;我不能在panel2的_leave中做,因为在设置回控制时,将再次调用GotFocus。

2 个答案:

答案 0 :(得分:1)

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



在评论中进行了一些清算后 更新。

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

您可以在"输入"中评估控制焦点状态变量。事件并将其分配到" GotFocus"事件避免在休假事件中重置任何内容。

通过这种方式,你应该始终知道以前的控制集中在"输入"每个控件的处理程序(您可以对所有控件使用相同的处理程序)并制定您的要求..

如果你需要在几个面板中管理一些分割控件,你也可以实现一个字典来映射控件所关注的每个面板,所以如果你从一个面板切换到另一个面板,你可能总是知道该面板的最后一个控件有焦点。

答案 1 :(得分:1)

我尝试了多种解决方案,最安全的选项似乎关闭了panel1控件上的选项卡控件,只要panel2中的控件获得焦点并在其离开焦点时将其重新打开。这确保了应用程序的重点不会转移到panel1。这也将确保我的控件适用于tabbing和shift_tabbing。将焦点设置为强制返回到panel2中的控制触发gotfocus()多次,这是排除目的

相关问题