如何使用c#4.0在TreeView中获取所有选中的复选框节点名称?

时间:2011-05-11 06:08:45

标签: c# .net treeview

我在基于C#Windows窗体的应用程序中有一个带CheckBox的TreeView。用户通过单击节点中的复选框来选择一个项目。现在我想在用户按下getselectedlist按钮时获取所选的复选框节点名称。我这样做了吗?

请指导我摆脱这个问题...

4 个答案:

答案 0 :(得分:21)

您可以使用简单的递归函数:

List<String> CheckedNames( System.Windows.Forms.TreeNodeCollection theNodes)
{
    List<String> aResult = new List<String>();

    if ( theNodes != null )
    {
        foreach ( System.Windows.Forms.TreeNode aNode in theNodes )
        {
            if ( aNode.Checked )
            {
                aResult.Add( aNode.Text );
            }

            aResult.AddRange( CheckedNames( aNode.Nodes ) );
        }
    }

    return aResult;
}

只需在YourTreeView.Nodes

上使用它即可

答案 1 :(得分:11)

或者,每次检查某些内容时,不会递归遍历TreeView中的每个节点,这可能会变得昂贵,就像我一样,您在列表中有数百或数千个项目,但检查的项目不超过20个。

我在check / uncheck之后添加/删除字符串列表,因为我只需要FullPath字符串,但如果需要,你也可以以相同的方式使用TreeNode集合。

public partial class Form1 : Form
{
    List<String> CheckedNodes = new List<String>();

    public Form1()
    {
        InitializeComponent();
    }

    private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
    {
        if (e.Node.Checked)
        {
            CheckedNodes.Add(e.Node.FullPath.ToString());
        }
        else
        {
            CheckedNodes.Remove(e.Node.FullPath.ToString());
        }
    }
}

答案 2 :(得分:1)

在按钮点击事件中,您可以按照http://msdn.microsoft.com/en-us/library/wwc698z7.aspx中的说明遍历整个树。然后,对于每个TreeNode,您可以检查是否选中了复选框,如果选中它,则可以将其名称添加到列表中。

答案 3 :(得分:1)

    //Uncomplicated, reliable method
    List<int> _valueList = new List<int>();
    private List<int> getCheckedNodes(TreeNodeCollection _parentNodeList)
    {
        foreach (TreeNode item in _parentNodeList)
        {
            if (item.Checked)
            {
                _valueList.Add(Convert.ToInt32(item.Value));
            }

            if (item.ChildNodes.Count > 0)
            {
                //.NET does not forget where it stayed.
                getCheckedNodes(item.ChildNodes);
            }
        } 

        return _valueList;
    }