2011-07-21 22 views
0

沒人問,以前:避免在TreeNode.ExpandAll上擴展某些TreeNode節點?

什麼是有效的方式,以避免某些TreeNode類的後代在一個WinForms TreeView擴展當用戶「全部展開」的事情,但還是讓他通過點擊展開這樣的節點+符號?

相信我能處理BeforeExpand,但我有一個困難時期設置e.Canceltrue只有當它是一個ExpandAll操作。我想知道我如何確定這一點?我可以子類TreeView並覆蓋ExpandAll - 但那個不能被覆蓋...

+0

簡單問題,無回覆?可能不像我想的那麼微不足道。 – TheBlastOne

回答

0

此作品100%。我認爲。嘆。

Private Sub MyTreeViewExpandNodes(ByVal Nodes As TreeNodeCollection) 
    For Each Node As TreeNode In Nodes 
     If Not (TypeOf Node Is SpecialTreeNode) Then 
     Node.Expand() 
     MyTreeViewExpandNodes(Node.Nodes) 
     End If 
    Next 
    End Sub 

    Private Sub MyTreeView_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyTreeView.KeyDown 
    If e.KeyCode = Keys.Multiply Then 
     e.Handled = True 
     e.SuppressKeyPress = True 
     MyTreeViewExpandNodes(MyTreeView.Nodes) 
    End If 
    End Sub 
+0

跛。我接受了我自己的答案。再次。對我感到羞恥。 – TheBlastOne

1

似乎標準的.NET樹視圖沒有其他的方式:觸發標誌在ExpandAll之前,處理BeforeExpand並啓用e。啓用標誌時取消適當的節點。

由於ExpandAll方法isn`t虛擬您有這些方法可以遵循:

從樹視圖類
  • 繼承並添加ExpandAllEx方法,其中觸發此標誌。沒有好的一個,因爲你需要在你使用樹實例的任何地方投射到你的樹類。
  • 爲使用此標誌的tree.Tag屬性的TreeView類添加擴展方法。對現有代碼進行最小更改的更有用的方法。
+0

我得到了兩個選項背後的總體思路,但我不明白如何正確實現其中任何一個。擴展方法會做什麼?如果用戶在數字鍵盤上按了星號,我會如何確保它被觸發?同樣,如果用戶推星號,我將如何確保我的TreeView後代中的ExpandAllEx將被觸發而不是ExpandAll? – TheBlastOne

+0

+1爲該賬號的奉獻精神,按名稱:) – TheBlastOne