1

我有一个包含两种形式的应用程序。第一种形式用于以TreeView编程方式创建节点,第二种形式具有实际的TreeView. 当应用程序加载时,我在TreeView.

我的问题是当我为任何一个根节点创建我的第一个子节点时,它没有突出显示。我给出了 Form 和TreeView焦点,并且还禁用HideSelectionTreeView.

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

示例代码:

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

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

在该代码之后,我调用:

m_ObjectAnimationForm.tr_vw_ANIMATION_OBJECT_LIST.ExpandAll();
m_ObjectAnimationForm.tr_vw_ANIMATION_OBJECT_LIST.Focus();
4

2 回答 2

0

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

焦点在这里不起作用。

于 2012-12-28T21:33:29.750 回答
0

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

总之:

1.) 从源 TreeView、其他控件或其他地方获取索引 2.) 展开目标 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;
    }
于 2012-12-28T22:54:56.577 回答