这个很难解释,所以我只会告诉你我想要实现什么以及我是如何做到的,所以也许有人会知道我做错了什么。
在我的 winForm 中,我有一个填充的 TreeView 控件。所有父母都有孩子(任意数量),但没有孩子有自己的孩子。例子:
- Parent 1
Child 1
Child 2
Child 3
- Parent 2
Child 4
我想要的行为如下:
- 当用户点击一个孩子时,它被选中(默认完成)
- 当用户单击父级时,它应该折叠或展开但不更改任何选择
第 1 点没有问题,因为它是 TreeView 的默认行为,但第 2 点是另一回事。
这是我到目前为止所做的:
为了防止父级被选中,我添加了一个 BeforeSelect 事件处理程序并在其中放入以下代码:
if (e.Node.Parent == null)
e.Cancel = true;
这完美地完成了这项工作。所以现在我取消了对父级的选择,我想展开或折叠它。所以我把上面的代码改成:
if (e.Node.Parent == null)
{
if (e.Node.IsExpanded)
{
e.Node.Collapse();
}
else
{
e.Node.Expand();
}
e.Cancel = true;
}
这有点工作 - 除了,与单击 + 号不同,调用 Expand() 或 Collapse() 会选择父节点,忽略 e.Cancel = true; 线。
我尝试在调用 Collapse() 或 Expand() 之前获取 SelectedNode,然后将其设置回来 - 它可以工作,但是当我这样做时,它会再次展开父节点以进行选择。
不知何故,当我点击父母时,+号正是我想要发生的事情——我似乎无法让它工作。
想法?
提前致谢