我希望默认显示树形视图的所有一级子节点, 然后在点击时展开它们的所有子节点。
尝试:
foreach (TreeNode tn in treeView1.Nodes) {
tn.Expand();
}
在运行时添加节点时,您只需检查级别并展开(如果需要):
private void ShouldAutoExpand(TreeNode tn) {
if (tn.Level == 0)
tn.Expand();
}
没有可以挂钩以自动检查的NodeAdded
事件。您必须自己确定节点是否应该“默认”展开。
更新:
根据您的评论,似乎您希望所有0级节点都展开,但在展开它们时展开所有1级子节点。
尝试使用以下代码订阅BeforeExpand事件:
private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e) {
treeView1.BeforeExpand -= treeView1_BeforeExpand;
if (e.Node.Level == 1) {
e.Node.ExpandAll();
}
treeView1.BeforeExpand += treeView1_BeforeExpand;
}
private TreeNode ExpandUptoLevel(TreeNode tn,int level)
{
if (level != 0)
{
level --;
tn.Nodes[0].Expand();
return ExpandUptoLevel(tn.FirstNode, level);
}
return tn;
}
你可以尝试这样做... 你需要改变示例以适应你自己的代码,因为你没有粘贴任何你拥有或尝试过的代码
private void addChildNode_Click(object sender, EventArgs e)
{
var childNode = textBox1.Text.Trim();
if (!string.IsNullOrEmpty(childNode)) {
TreeNode parentNode = treeView2.SelectedNode ?? treeView2.Nodes[0];
if (parentNode != null) {
parentNode.Nodes.Add(childNode);
treeView2.ExpandAll();
}
}
}
void expAll(TreeNode node)
{
node.Expand();
foreach(TreeNode i in node.Nodes)
{
expAll(i);
}
}
private void ExpandUptoLevel(TreeNode tn, int level)
{
if (level >= tn.Level)
{
tn.Expand();
foreach (TreeNode i in tn.Nodes)
{
ExpandUptoLevel(i,level);
}
}
}
只打开第一个节点:
for (int i = 0; i< treeView1.Nodes.Count; i++)
{
treeView1.Nodes[i].Expand();
}