1

2つの形式のアプリケーションがあります。最初のフォームはTreeViewプログラムでノードを作成するために使用され、2番目のフォームには実際のがありTreeViewます。アプリケーションがロードされると、に2つのルートノードを作成しますTreeView

私の問題は、いずれかのルートノードの最初のサブノードを作成するときに、強調表示されないことです。フォームとフォーカスを指定し、のプロパティ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

データグリッドビューでアイテムを選択することにより、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 に答える
0

Node.Select()を使用してみてください。ノードが選択され、強調表示されます。

ここではフォーカスが機能しません。

于 2012-12-28T21:33:29.750 に答える