Winforms 有可能避免关注SplitContainer吗?

Winforms 有可能避免关注SplitContainer吗?,winforms,focus,splitcontainer,Winforms,Focus,Splitcontainer,WinForm SplitContainer在拖动或单击时获得焦点,而拆分器则没有。 这样做的副作用是,拖动SplitContainer栏会激发其他控件上的Leave/Validate,我需要避免这种情况 我已经尝试设置TabStop并将验证设置为False,但没有成功 有没有办法阻止SplitContainer聚焦?(没什么大不了的,我仍然可以使用旧的拆分器,但我失去了一些不错的VS属性…Filini splitcontainer只有在实际移动拆分器时才具有焦点。所以我想在你们的确认和离开事件

WinForm SplitContainer在拖动或单击时获得焦点,而拆分器则没有。 这样做的副作用是,拖动SplitContainer栏会激发其他控件上的Leave/Validate,我需要避免这种情况

我已经尝试设置TabStop并将验证设置为False,但没有成功

有没有办法阻止SplitContainer聚焦?(没什么大不了的,我仍然可以使用旧的拆分器,但我失去了一些不错的VS属性…

Filini

splitcontainer只有在实际移动拆分器时才具有焦点。所以我想在你们的确认和离开事件中这样做

private void Button_Leave(object sender, EventArgs e)
{
    if(SplitContainer.ContainsFocus)
        return;
}
我复制了您的问题,当我添加上面的内容时,它当然仍会调用事件,但代码不会执行,因为在移动拆分器时,拆分容器具有焦点

希望对您有所帮助。

请尝试以下代码:

//This code will move the focus from the splitContainer to TreeView shortly after moved.
private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e) {
    if(this.splitContainer1.CanFocus) {
       this.splitContainer1.ActiveControl = this.treeView1;
    }
}

卸下SplitContainer控件并手动将其替换为Panel和Splitter控件。再努力一点,但结果会更干净。

不幸的是,这不适合我们的体系结构。我有一个usercontrol,它使用标准的验证事件进行验证,我无法更改它的行为,因为其他外部控件出现故障(这就是问题所在,当您移动splitcontainer栏时,会触发leave/Validationg事件,但焦点仍然在该栏上,并且我的usercontrol由于某种原因而冻结)。让我烦恼的是,普通的拆分器不会发生这种情况,因为它在移动时没有聚焦。最后,我想我将只使用一个拆分器,我已经尝试过了,我无法复制的行为的重点仍然在酒吧。在我所有的尝试中,在单击拆分器之前,焦点立即返回到拥有焦点的控件。很抱歉,我无法提供帮助。即使它起作用(但我认为验证火灾无论如何),我也必须将此代码放在所有详细信息用户控件中(大约15个)。这是无法管理的。我希望找到一个解决方案,将一些代码放在SplitContainer中,而不是放在其他控件中。无论如何,谢谢:)使用焦点触发器验证是一个糟糕的设计。也许你可以捕捉到它获得焦点的事件。记住之前聚焦的对象,然后在MouseUp上重新聚焦。TabStop将负责键盘部分。