2012-12-28 62 views
1

我有兩種形式的應用程序。第一種形式用於以編程方式創建TreeView節點,第二種形式具有實際的TreeView。當應用程序加載時,我在TreeView中創建了兩個根節點。如何在樹形視圖中突出顯示第一個插入的節點?

我的問題是當我爲任一根節點創建我的第一個子節點時,它沒有突出顯示。我給出了表格和TreeView焦點,並且還爲TreeView禁用了HideSelection屬性。

一旦我將另一個子節點添加到任一個根節點時,插入的節點就會變亮。我希望插入的每個節點在插入後都能突出顯示,但只有插入第一個節點後才能使用。

例如代碼:

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

我創建使用該對象的ID爲「KEY」並且節點的字符串的新樹節點,則該函數將返回新創建的樹節點,使得它樹中選定的節點。

代碼後,我打電話:

m_ObjectAnimationForm.tr_vw_ANIMATION_OBJECT_LIST.ExpandAll(); 
m_ObjectAnimationForm.tr_vw_ANIMATION_OBJECT_LIST.Focus(); 
+1

是構成可見這個代碼運行的時間?爲什麼它沒有重點?贊成選擇()通過焦點()。 –

+0

我發現使用Select()做了這個把戲。我不得不調用窗體的Select(),然後調用樹視圖的Select()使其正確工作。謝謝。 –

回答

0

我有一個稍微不同的設置,其中我通過在datagridview中選擇一個項目來控制TreeView中突出顯示的項目。這不是最優雅的方法,但它的工作原理。

總結:

1)從源樹視圖,其它控制,或其他地方 2.獲取指數)展開的目標樹視圖 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; 
    } 
0

嘗試使用Node.Select(),它會選擇節點,並強調這一點。

重點不會在這裏工作。

相關問題