WinForm SplitContainer 在拖动或单击时获得焦点,而 Splitter 则没有。这样做的副作用是拖动 SplitContainer 栏会在其他控件上触发 Leave/Validate,我需要避免这种情况。
我已经尝试将 TabStop 和 CausesValidation 设置为 False,但没有成功。
有没有办法阻止 SplitContainer 集中注意力?(没什么大不了的,我仍然可以使用旧的 Splitter,但我失去了一些不错的 VS 属性......)
WinForm SplitContainer 在拖动或单击时获得焦点,而 Splitter 则没有。这样做的副作用是拖动 SplitContainer 栏会在其他控件上触发 Leave/Validate,我需要避免这种情况。
我已经尝试将 TabStop 和 CausesValidation 设置为 False,但没有成功。
有没有办法阻止 SplitContainer 集中注意力?(没什么大不了的,我仍然可以使用旧的 Splitter,但我失去了一些不错的 VS 属性......)
移除 SplitContainer 控件并手动将其替换为 Panel 和 Splitter 控件。多一点努力,但结果要干净得多。
试试这个代码:
//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 唯一具有焦点的时间是当您实际移动拆分器时。所以我会在你的验证和离开事件中这样做。
private void Button_Leave(object sender, EventArgs e)
{
if(SplitContainer.ContainsFocus)
return;
}
我重现了您的问题,当我添加上面的内容时,它当然仍然调用事件,但是代码执行不会发生,因为在您移动拆分器时 SplitContainer 具有焦点。
希望有帮助。