Как получить все выбранные флажки имя узла в TreeView с помощью C # 4.0? - PullRequest
10 голосов
/ 11 мая 2011

У меня есть TreeView с CheckBox в моем приложении на основе форм C # Windows. Пользователь выбирает элемент, устанавливая флажки в узлах.Теперь я хочу получить имя выбранного флажка, когда нажимаю кнопку getselectedlist, нажимаемую пользователем. Как я это делаю?

Ответы [ 4 ]

21 голосов
/ 11 мая 2011

Вы можете просто использовать простую рекурсивную функцию:

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

11 голосов
/ 05 июля 2013

Или вместо того, чтобы рекурсивно проходить по каждому узлу в 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());
        }
    }
}
1 голос
/ 27 февраля 2015
    //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;
    }
1 голос
/ 11 мая 2011

В событии нажатия кнопки вы можете выполнить итерацию по всему дереву, как описано в http://msdn.microsoft.com/en-us/library/wwc698z7.aspx. Затем для каждого TreeNode вы можете проверить, установлен флажок или нет, и если он установлен, вы можете добавить его имя в список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...