我使用以下代码:

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/

10-12 12:49