3

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

我已经尝试将 TabStop 和 CausesValidation 设置为 False,但没有成功。

有没有办法阻止 SplitContainer 集中注意力?(没什么大不了的,我仍然可以使用旧的 Splitter,但我失去了一些不错的 VS 属性......)

4

3 回答 3

2

移除 SplitContainer 控件并手动将其替换为 Panel 和 Splitter 控件。多一点努力,但结果要干净得多。

于 2011-10-12T20:53:47.823 回答
1

试试这个代码:

//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;
    }
}
于 2011-06-28T17:43:22.430 回答
0

菲利尼,

splitcontainer 唯一具有焦点的时间是当您实际移动拆分器时。所以我会在你的验证和离开事件中这样做。

private void Button_Leave(object sender, EventArgs e)
{
    if(SplitContainer.ContainsFocus)
        return;
}

我重现了您的问题,当我添加上面的内容时,它当然仍然调用事件,但是代码执行不会发生,因为在您移动拆分器时 SplitContainer 具有焦点。

希望有帮助。

于 2009-07-23T19:51:58.690 回答