gpt4 book ai didi

c# - TreeView : SelectedNode doesnt work for me

转载 作者:太空狗 更新时间:2023-10-30 00:59:01 26 4
gpt4 key购买 nike

我使用以下代码:

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# - TreeView : SelectedNode doesnt work for me,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1576573/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com