Windows窗体TreeView始终选择焦点上的节点

Mic*_*ley 5 c# treeview winforms

Windows窗体中的TreeView似乎总是希望在重新获得焦点时选择一个节点.如果我没有选择的节点,而树视图获得焦点,我会得到一个AfterSelect与选择的第一个节点事件,即使我没有使用键盘,鼠标,或以编程方式选择它.我能找到的唯一解决方法是检查是否TreeViewCancelEventArgs.Action等于TreeViewAction.Unknown然后取消选择.这看起来真的很hacky,所以我想知道是否还有另一种解决方法.

小智 6

我同意TreeViewAction.Unknown在这种情况下使用不太理想.考虑使用BeforeSelect事件,这提供了防止AfterSelect事件的机会.

创建一个GotFocus设置标志的事件处理程序.然后,创建一个BeforeSelect事件处理程序,如果设置了该标志,则取消该事件并清除该标志.例如:

private bool treeViewWasNewlyFocused = false;

private void TreeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e)
{
    if(treeViewWasNewlyFocused)
    {
        e.Cancel = true;
        treeViewWasNewlyFocused = false;
    }
}

private void TreeView1_GotFocus(object sender, EventArgs e)
{
    treeViewWasNewlyFocused = true;
}
Run Code Online (Sandbox Code Playgroud)


小智 6

我通过关闭TabStop树视图解决了我的问题.