C # help древовидная структура и флажок - PullRequest
0 голосов
/ 07 апреля 2011

Я действительно не могу выбраться из этого.

Я получил предметы в виде дерева в виде дерева. Элементы древовидной структуры содержат флажки с содержимым. Как мне получить контент и поместить его в список. в настоящее время я получил это

        foreach (TreeViewItem item in treeView1.Items)
        {


            foreach (TreeViewItem childItem in item.Items)
            {


                CheckBox checkBoxTemp = childItem.Header as CheckBox;

                if (checkBoxTemp == null) continue;

                optieListBox.Items.Add(checkBoxTemp.Content);
            }



        }

Ответы [ 3 ]

0 голосов
/ 07 апреля 2011

Свяжите свой TreeView с коллекцией вместо.Таким образом, вам не придется манипулировать компонентами пользовательского интерфейса для доступа к данным, вы получите доступ к данным напрямую.

Другой способ сделать это - через рекурсию: объявить список optieListBox на уровне класса и вызвать метод GetContainers () как вызов точки входа.Список optieListBox должен содержать список содержимого для всех отмеченных элементов в древовидной структуре.

List<string> optieListBox = new List<string>();

        private List<TreeViewItem> GetAllItemContainers(TreeViewItem itemsControl)
        {
            List<TreeViewItem> allItems = new List<TreeViewItem>();
            for (int i = 0; i < itemsControl.Items.Count; i++)
            {
                // try to get the item Container  
                TreeViewItem childItemContainer = itemsControl.ItemContainerGenerator.ContainerFromIndex(i) as TreeViewItem;
                // the item container maybe null if it is still not generated from the runtime  
                if (childItemContainer != null)
                {
                    allItems.Add(childItemContainer);
                    List<TreeViewItem> childItems = GetAllItemContainers(childItemContainer);
                    foreach (TreeViewItem childItem in childItems)
                    {
                        CheckBox checkBoxTemp = childItem.Header as CheckBox;

                        if (checkBoxTemp != null)
                            optieListBox.Items.Add(checkBoxTemp.Content);

                        allItems.Add(childItem);
                    }
                }
            }
            return allItems;
        }

        private void GetContainers()
        {
            // gets all nodes from the TreeView  
            List<TreeViewItem> allTreeContainers = GetAllItemContainers(this.objTreeView);
            // gets all nodes (recursively) for the first node  
            TreeViewItem firstNode = this.objTreeView.ItemContainerGenerator.ContainerFromIndex(0) as TreeViewItem;
            if (firstNode != null)
            {
                List<TreeViewItem> firstNodeContainers = GetAllItemContainers(firstNode);
            }
        }
0 голосов
/ 22 апреля 2011

Попробуйте это:

List<string> values = new List<string>;
foreach (string node in treeView.Nodes)
{
    values.Add(node);
}

//Loop through nodes

Кроме того, если у узлов дерева есть дочерние элементы (узлы), попробуйте вместо этого:

List<string> values = new List<string>;

//Called by a button click or another control
private void getTreeValues(Object sender, EventArgs e)
{
    foreach (string node in treeView.Nodes)
    {
        TreeNode child = (TreeNode)child;
        values.Add(node)
        getNodeValues(child);
    }
    foreach (string value in values)
    {
        Console.WriteLine(value + "\n");
    }
}

//Recursive method which finds all children of parent node.
private void getNodeValues(TreeNode parent)
{
    foreach (string child in parent.Nodes)
    {
        TreeNode node = (TreeNode)child;
        values.Add(child);
        if (nodes.Nodes.Count != 0) getNodeValues(child);
    }
}
0 голосов
/ 07 апреля 2011

Я не уверен, правильно ли я понял ваш вопрос, но вы можете попробовать это.

        foreach (TreeViewItem childItem in item.Items)
        {
            CheckBox cbx = null;
            //finds first checkbox
            foreach(object child in childItem.Items){
                cbx = child as CheckBox;
                if (cbx != null) break;
            }

            ctrList.Items.Add(cbx.Content);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...