如何在树视图中突出显示第一个插入的节点?

时间:2012-12-28 21:10:48

标签: c# wpf treeview

我有一个有两种表格的应用程序。第一个表单用于以编程方式创建TreeView个节点,第二个表单具有实际的TreeView。当应用程序加载时,我在TreeView中创建了两个根节点。

我的问题是当我为任一个根节点创建我的第一个子节点时,它没有突出显示。我提供了表单和TreeView焦点,并且还禁用了HideSelection的{​​{1}}属性。

一旦我将另一个子节点添加到任一根节点,就会在插入的节点突出显示时。我希望每个插入的节点在插入后都会突出显示,但只有在插入第一个节点后才能生效。

示例代码:

TreeView

我使用“KEY”对象的ID和节点的字符串创建一个新的树节点,然后该函数返回新创建的树节点,使其成为树中的选定节点。

在那段代码之后我打电话给:

m_ObjectAnimationForm.tr_vw_ANIMATION_OBJECT_LIST.SelectedNode = m_ObjectAnimationForm.tr_vw_ANIMATION_OBJECT_LIST.Nodes["OBJECTS_ROOT"].Nodes.Add(NewObject.ID, NewObject.ID);

2 个答案:

答案 0 :(得分:0)

尝试使用Node.Select(),它将选择节点并突出显示它。

焦点在这里不起作用。

答案 1 :(得分:0)

我有一个稍微不同的设置,我通过选择datagridview中的项目来控制TreeView中突出显示的项目。它不是最优雅的方法,但它有效。

摘要:

1。)从Source TreeView,Other Control或其他地方获取索引 2.)展开Target TreeView中的所有节点 3.)迭代目标中的树节点,直到达到索引 4.)设置TreeView.SelectedNode =“找到的节点” 5.)将焦点设置在TreeView上

    private void selectTreeViewItem(int dataGridViewRowIndex)
    {
        expandAllTreeViewNodes();
        setTreeViewItem(dataGridViewRowIndex);
    }

    private void setTreeViewItem(int dataGridViewRowIndex)
    {
        int iterator = 0;
        TreeNode tempNode = testStepTreeView.Nodes[iterator];
        //don't need to actually return the integer...
        iterator = findNode(tempNode, dataGridViewRowIndex, iterator);
        testStepTreeView.Focus();
        nodeFound = false;
    }

    private void expandAllTreeViewNodes()
    {
        if (testStepTreeView.Nodes.Count != 0)
        {
            foreach (TreeNode x in testStepTreeView.Nodes)
            {
                expandNode(x);
            }
        }
    }

    private void expandNode(TreeNode x)
    {
        if (x.IsExpanded == false)
        {
            x.Expand();
        }
        if (x.Nodes.Count > 0)
        {
            foreach (TreeNode y in x.Nodes)
            {
                expandNode(y);
            }
        }
    }

    private int findNode(TreeNode tempNode, int dataGridViewRowIndex, int iterator)
    {

        if (iterator > dataGridViewRowIndex)
        {
            return iterator;
        }
        if (iterator == dataGridViewRowIndex)
        {
            testStepTreeView.SelectedNode = tempNode;
            nodeFound = true;
            return iterator;
        }

        if (tempNode.Nodes.Count != 0)
        {
            iterator++;
            if (iterator > dataGridViewRowIndex)
            {
                return iterator;
            }
            if (nodeFound == false)
            {
                iterator = findNode(tempNode.Nodes[0], dataGridViewRowIndex, iterator);
            }
        }

        if (tempNode.NextNode != null)
        {
            iterator++;
            if (iterator > dataGridViewRowIndex)
            {
                return iterator;
            }
            if (nodeFound == false)
            {
                iterator = findNode(tempNode.NextNode, dataGridViewRowIndex, iterator);
            }

        }
        return iterator;
    }