Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取树视图中的所有可见节点_C#_.net_Winforms_Treeview - Fatal编程技术网

C# 获取树视图中的所有可见节点

C# 获取树视图中的所有可见节点,c#,.net,winforms,treeview,C#,.net,Winforms,Treeview,我只想在treeview上“仅在视图中”获取节点的密钥 这是一个例子 我使用下面的代码递归地获取所有节点。它只是按预期返回所有节点密钥。然而,我需要得到的钥匙,只有在树视图的看法 public void PrintNodesRecursive(UltraTreeNode oParentNode) { if (oParentNode.Nodes.Count == 0) { return; } foreach (UltraTreeNode oSubN

我只想在treeview上“仅在视图中”获取节点的密钥

这是一个例子

我使用下面的代码递归地获取所有节点。它只是按预期返回所有节点密钥。然而,我需要得到的钥匙,只有在树视图的看法

public void PrintNodesRecursive(UltraTreeNode oParentNode)
{
    if (oParentNode.Nodes.Count == 0)
    {
        return;
    }
    foreach (UltraTreeNode oSubNode in oParentNode.Nodes)
    {
        MessageBox.Show(oSubNode.Key.ToString());
        PrintNodesRecursive(oSubNode);
    }
}

private void ultraButton3_Click(object sender, EventArgs e)
{
    PrintNodesRecursive(ultraTree1.Nodes[0]);
}
我不知道我应该遵循不同的路径,或者只是重新组织代码


过了好几个小时我才起床。需要您的帮助。

您可以使用
节点
集合和
节点
属性找到第一个可见节点。然后创建一个递归方法,该方法使用
NextVisibleNode
TreeView
中查找下一个可见节点

private void button1_Click(object sender, EventArgs e)
{
    var visibleNodes = GetVisibleNodes(treeView1).ToList();
}
public IEnumerable<TreeNode> GetVisibleNodes(TreeView t)
{
    var node = t.Nodes.Cast<TreeNode>().Where(x => x.IsVisible).FirstOrDefault();
    while (node != null)
    {
        var temp = node;
        node = node.NextVisibleNode;
        yield return temp;
    }
}
private void按钮1\u单击(对象发送者,事件参数e)
{
var visibleNodes=GetVisibleNodes(treeView1.ToList();
}
公共IEnumerable GetVisibleNodes(TreeView t)
{
var node=t.Nodes.Cast()。其中(x=>x.IsVisible)。FirstOrDefault();
while(节点!=null)
{
var-temp=节点;
node=node.NextVisibleNode;
屈服返回温度;
}
}

另一种选择是,您可以使用扩展方法展平
树视图
,然后使用
IsVisible
属性获取所有可见节点。

您是否尝试过树节点的
.IsExpanded
.IsVisible
.NextVisibleNode
.previsiblenode
属性?(如果我正确理解这个问题)。@Jimi嘿,是的,我尝试了下一个可见节点,它工作得很好,但我没有进入for循环。如何以编程方式使用下一个可见节点获取所有节点?谢谢。你让我开心。我想在不久的将来像你一样,先生。