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

发布于 2024-11-06 12:30:02 字数 149 浏览 0 评论 0原文

我在基于 C# Windows 表单的应用程序中有一个带有复选框的 TreeView。用户通过单击节点中的复选框来选择一个项目。现在我想在每次单击用户按下的 getselectedlist 按钮时获取选定的复选框节点名称。我该怎么做?

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

I have a TreeView with CheckBox in my C# Windows form based application.The user select an item by clicking the checkboxes in the nodes. Now i want to get the selected checkboxes node name whenever clicking getselectedlist button pressed by the user.how i do it?.

Please Guide me to get out of this issue...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

爱人如己 2024-11-13 12:30:02

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

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 上使用它

You can just use simple recursive function:

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;
}

Just use it on YourTreeView.Nodes

转瞬即逝 2024-11-13 12:30:02

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

我在选中/取消选中后从字符串列表中添加/删除,因为我只需要 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());
        }
    }
}

Or instead of recursively looping through every node in the TreeView every time something gets checked which could get expensive when, like me, you have hundreds or thousands of items in the list, but no more than 20 items being checked.

I add/remove from a string list after check/uncheck since I only needed the FullPath strings, but you could probably also use a collection of TreeNode in the same way if you needed that.

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());
        }
    }
}
终弃我 2024-11-13 12:30:02
    //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;
    }
    //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;
    }
寂寞美少年 2024-11-13 12:30:02

在按钮单击事件中,您可以迭代整个树,如 http:// msdn.microsoft.com/en-us/library/wwc698z7.aspx。然后,对于每个 TreeNode,您可以检查复选框是否已选中,如果选中,您可以将其名称添加到列表中。

On the button click event, you can iterate through whole tree as explained at http://msdn.microsoft.com/en-us/library/wwc698z7.aspx. Then for each TreeNode you can check if the checkbox is checked or not and if it is checked you can add its name in to a list.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文