【发布时间】:2016-09-30 04:47:30
【问题描述】:
我正在尝试实际上取消选择 TreeView 中的所有节点。 “实际上”是指TreeView1.SelectedNode = null; 实际上会取消选择树中的节点。
现在,从视觉上讲,该节点已取消选择。但是,当我尝试添加一个新节点时,treeview 将自动选择树中的第一个节点(在顶部)并在理想情况下创建一个子节点时我想创建一个父节点。我不能在添加之前取消选择选定的节点,因为用户可能想要添加一个子节点。我想要的行为是基于在树视图中选择的父/子节点添加。如果未选择任何内容,则添加父节点,如果选择了某些内容,则在该选定节点中添加子节点。
我在一个包含图像和文本的函数中构造了一个名为 node 的 TreeNode 对象,然后我拥有以下内容:
if (tvContent.SelectedNode == null)
tvContent.Nodes.Add(node);
else
{
tvContent.SelectedNode.Nodes.Add(node);
tvContent.SelectedNode.Expand();
}
我有一个“取消全选”按钮,应该可以使上述代码正常工作。该按钮的代码很简单:
tvContent.SelectedNode = null;
请原谅我同时标记 C# 和 VB.NET。我对这两种语言都很好,所以如果有人能用任何一种语言帮助我,那就太好了!
谢谢
编辑:
有趣的。似乎在测试所选节点是否为空时,.NET 会自动将所选节点设置为树中的第一个节点。以下代码显示了“触发器”消息框,但在 if 语句完成后立即选择树中的第一个节点。
private void btnDeselectAll_Click(object sender, EventArgs e)
{
tvContent.SelectedNode = null;
if (tvContent.SelectedNode == null) MessageBox.Show("trigger");
}
EDIT2:问题在于使用 InputBox 作为节点的标题输入。无论出于何种原因,这都会更改树视图的选定节点。我在一个股票项目中尝试了这个并设法复制了这个问题。我想没有解决这个问题:S
【问题讨论】:
-
在 tvContent.SelectedNode 块上放一个断点,然后按 F11(逐步调试)查看代码的哪一行将 tvContent.SelectedNode 更改为第一个节点。
-
没有找到任何改变它的代码,老实说它看起来像它自己被改变了。
-
@Martheen 请查看我的帖子编辑。这似乎是 .net 中的奇怪行为
-
@Martheen 检查我的帖子的“EDIT2”。有什么想法吗?
-
使用 InputBox 进行标题输入是什么意思?不妨只发布您的库存项目,以便我们可以复制问题。
标签: c# .net vb.net winforms treeview