1

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

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

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

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

这确实会取消选择节点,但仅在不希望出现的明显闪烁(~200 毫秒)之后。

4

3 回答 3

9

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

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

private void treeView1_MouseUp(object sender, MouseEventArgs e)
{
    treeView1.EndUpdate();
}
于 2010-10-05T11:31:15.497 回答
2

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

于 2008-12-18T15:08:52.097 回答
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 上,但它至少停止了蓝色背景并让你走得更远。

高温高压

OneSHOT

于 2009-06-09T22:32:46.223 回答