多选树节点






3.80/5 (5投票s)
无需使用自定义控件,即可轻松在树状视图中实现多选
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日:初始版本