3
这一个很难解释,所以我只是告诉你我想实现什么以及我如何做,所以也许有人会对我做错的想法有所了解。C#TreeView Collapse/Expand on parent select
在我的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;
}
这有些工作 - 除了不像点击+符号,调用扩展()或折叠()使得父节点被选择,忽略e.Cancel =真;线。
我试着在调用Collapse()或Expand()之前获取SelectedNode,然后将其设置回去 - 它可以工作,但是当我这样做时它会再次展开父级以进行选择。
某些+标志确实是我想要发生的事情,当我点击父母 - 我似乎无法让它工作。
想法?
在此先感谢
方式复活呐老话题 - 洛尔 - 因为我已经移出这个项目,但你的答案似乎是固体,所以我将它送给你 – 537mfb 2013-07-29 11:10:44
@你能解释一下这里发生了什么吗?我不完全确定。我的问题是,我的SelectedNodeChanged不会触发,如果我点击两次相同的节点(一个用于展开,一个用于折叠) – Ortund 2013-09-16 10:39:54
我没有在TreeView中找到SelectedNodeChanged事件。你的意思是AfterSelect?实际上,当您单击某个根(可展开)节点时,此代码不会更改选择。请注意,树的结构应该遵循以下问题的陈述:“所有父母都有孩子(任何数量的孩子),但没有孩子有自己的孩子” – chiper 2013-10-24 16:02:53