我使用以下代码:
TreeNode i = treeView1.SelectedNode;
RefillTree(); //clears the tree and rebuilt it again.
treeView1.SelectedNode=i;
但是, SelectedNode 仍然保持为空,但是“i”正确引用。
我需要在树刷新后自动选择和展开特定节点。
谢谢
最佳答案
“RefillTree”究竟是做什么的?如果它删除了“i”引用的节点,那么我希望将 SelectedNode 属性设置为控件中不存在的节点将不起作用。
编辑:
我几乎可以保证您正在清除控件并创建新节点来填充它。这些新节点是否包含相同的数据并不重要,SelectedNode 会查找对象相等性,但找不到匹配项。例如,此代码重现您的问题:
treeView1.nodes.Add( new TreeNode( "Node 1" ) );
treeView1.nodes.Add( new TreeNode( "Node 2" ) );
treeView1.SelectedNode = new TreeNode( "Node 1" );
// null reference exception here, we did not find a match
MessageBox.Show( treeView1.SelectedNode.ToString( ) );
因此,您可以在清除控件后按值查找节点:
TreeNode node1 = new TreeNode( "Node 1" );
TreeNode node2 = new TreeNode( "Node 2" );
treeView1.Nodes.Add( node1 );
treeView1.Nodes.Add( node2 );
treeView1.Nodes.Clear( );
treeView1.Nodes.Add( "Node 1" );
treeView1.Nodes.Add( "Node 2" );
// you can obviously use any value that you like to determine equality here
var matches = from TreeNode x in treeView1.Nodes
where x.Text == node2.Text
select x;
treeView1.SelectedNode = matches.First<TreeNode>( );
// now correctly selects Node2
MessageBox.Show( treeView1.SelectedNode.ToString( ) );
在这里使用 LINQ 似乎很笨拙,但 TreeNodeCollection 类只公开了一个使用节点的 Name 属性的 Find() 方法。你也可以使用它,但同样笨重。
关于c# - 树状 View : SelectedNode doesnt work for me,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1576573/