65.9K
CodeProject 正在变化。 阅读更多。
Home

多选树节点

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.80/5 (5投票s)

2008年4月4日

CPOL

1分钟阅读

viewsIcon

37264

downloadIcon

558

无需使用自定义控件,即可轻松在树状视图中实现多选

TreeView 中选择多个节点

如果你正在使用 treeview 控件,并且希望实现多节点选择功能,那么这段代码就是为你准备的。 我在网上阅读的大多数文章要么建议使用自定义树控件,要么提供的代码对我来说过于复杂。 因此,我自己编写了这段代码,以便任何想要使用此功能的人都可以在现有的树视图中实现它,而无需依赖自定义控件。

背景

这段代码的思路很简单,我全局维护了一个 treenode 列表。 当用户点击一个节点时,会检查是否按下了任何修饰键,例如 Ctrl 键。 如果没有按下任何修饰键,则清空列表并向列表中添加该节点。 如果按下了 Ctrl 键,则将该节点添加到列表中。 最后,我编写了一个函数来绘制树,以便仅突出显示列表中存在的节点。

Using the Code

下面的函数 treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e) 在选择 treeview 中的任何节点之前被调用。 另一行重要的代码是 e.Cancel = true;。 如果没有这段代码,当我们取消选择节点时,Windows 函数会再次绘制它。 结果,treeview 节点的颜色不会按预期改变。 取消此事件参数可以防止 Windows 重新绘制节点为选中状态。

        private void treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e)
        {
            if (ModifierKeys == Keys.Control)
            {
                if (trSelectedNodes.Contains(e.Node))
                    trSelectedNodes.Remove(e.Node);
                else trSelectedNodes.Add(e.Node);
            }
            else
            {
                trSelectedNodes.Clear();
                trSelectedNodes.Add(e.Node);
            }
            trPaintSelected();
            showSelectedInBox();
            e.Cancel = true;
        }		

替代方案

也可以在 NodeMouseClick() 函数中完成同样的操作。 :) 我很快会发布代码。

历史

  • 2008年4月4日:初始版本
多选 TreeNode - CodeProject - 代码之家
© . All rights reserved.