C#停止树视图选择一个或多个TreeNodes

时间:2008-12-18 15:03:04

标签: c# winforms treeview treenode

我有一个TreeView控件,在有组织的层次结构中显示多个TreeNode。我想阻止用户选择最高级别的节点(这是通过使用BeforeSelect事件实现的)。如果用户选择它们,我还想阻止TreeView突出显示顶级节点,即停止TreeView更改节点的背景颜色并“选择”它。

我使用的TreeView是控件的WinForms版本。

以下是我目前正在尝试使用的源代码:

private void tree_BeforeSelect ( object sender, TreeViewCancelEventArgs e )
{
    if ( e.Node.Level == 0 )
    {
        e.Cancel = true;
    }
}

这确实取消选择节点,但仅在不可取的闪存(~200ms)之后才会取消选择。

3 个答案:

答案 0 :(得分:9)

此代码阻止在取消之前绘制选择:

private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
    treeView1.BeginUpdate();
}

private void treeView1_MouseUp(object sender, MouseEventArgs e)
{
    treeView1.EndUpdate();
}

答案 1 :(得分:2)

如果通过在BeforeSelect的事件参数中将取消设置为true来取消选择,则不会选择该节点,因此背景颜色不会改变。

答案 2 :(得分:2)

除了现有代码之外,如果使用代码向TreeView上的MouseDown事件添加处理程序并使用它的位置选择节点,则可以设置节点颜色。

private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
    TreeNode tn = treeView1.GetNodeAt(e.Location);
    tn.BackColor = System.Drawing.Color.White;
    tn.ForeColor = System.Drawing.Color.Black;
}

还有一个小问题,选择大纲仍然显示在MouseDown上,但它至少会停止蓝色背景并让你更进一步。

HTH

单稳