как получить имя узла всех выбранных флажков в TreeView с помощью c # 4.0?

#c# #.net #treeview

#c# #.net #просмотр дерева

Вопрос:

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

Пожалуйста, помогите мне решить эту проблему…

Ответ №1:

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

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

Просто используйте его на YourTreeView.Nodes

Комментарии:

1. Но aResult.AddRange( CheckedNames( aNode.Nodes ) ); — это дочерняя итерация

Ответ №2:

Или вместо рекурсивного перебора каждого узла в TreeView каждый раз, когда что-то проверяется, что может стать дорогостоящим, когда, как у меня, у вас есть сотни или тысячи элементов в списке, но проверяется не более 20 элементов.

Я добавляю / удаляю из списка строк после проверки / снятия флажка, поскольку мне нужны были только строки полного пути, но вы, вероятно, могли бы также использовать коллекцию 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());
        }
    }
}
  

Ответ №3:

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

Ответ №4:

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