1

我有一个分离器面板失去控制的问题,需要重新设置。

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

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

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

4

2 回答 2

1

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



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

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

您可以在“Enter”事件中评估控制焦点状态变量,并在“GotFocus”事件中分配它,避免重置离开事件中的任何内容。

通过这种方式,您应该始终了解每个控件的“Enter”处理程序中关注的先前控件(您可以对所有控件使用相同的处理程序)并提出您的要求..

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

于 2016-06-21T08:03:48.043 回答
1

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

于 2016-07-01T07:21:35.443 回答