2012-07-26 110 views
2

我有一個VB6的TreeView,當點擊節點的圖像(+或 - )時,節點展開,然後立即摺疊,反之亦然。我有展開/摺疊被點擊時,一個節點一個TreeView Click方法(如下圖所示的簡化版本)檢測TreeView節點圖像點擊

Private Sub MyTreeView_Click() 

    Dim selectedNode As Node 
    Dim nodeType As String 

    Set selectedNode = MList2.SelectedItem 
    If selectedNode Is Nothing Then 
     Exit Sub 
    End If 

    nodeType = selectedNode.Key 

    If nodeType = "MyNodeType" Then 

     'Collapse Node if it's already expanded, otherwise expand it. 
     If selectedNode .Expanded Then 
      selectedNode .Expanded = False 
     Else 
      'Do some processing 

      selectedNode .Expanded = True 
     End If 
    End If 
End Sub 

如果單擊節點的文本部分也能正常工作。但是,如果單擊節點的圖像部分,則在到達此EventHandler之前展開/摺疊節點,導致節點在確實擊中此EventHandler時立即返回到其原始狀態。節點的第一次展開/摺疊似乎發生在NodeDown上的MouseDown上。

有沒有人知道我可以如何防止點擊節點圖像時點擊此EventHandler之前展開/摺疊節點?

任何幫助將不勝感激,在此先感謝。

+2

您可以嘗試處理摺疊/展開消息並放下它們,使您的代碼可以明確設置它。 – Deanna 2012-07-26 09:31:07

回答

1

您可以使用TreeView的CollapseExpand事件來設置一個布爾變量,指示您的過程不應運行。 EG:

Dim bNodeImageClicked As Boolean 

Private Sub MyTreeView_Collapse(ByVal Node As MSComctlLib.Node) 
    bNodeImageClicked = True 
End Sub 

Private Sub MyTreeView_Expand(ByVal Node As MSComctlLib.Node) 
    bNodeImageClicked = True 
End Sub 

Private Sub MyTreeView_Click() 
    If bNodeImageClicked Then 
     bNodeImageClicked = False 
     Exit Sub 
    End If 

    'Your code... 
End Sub 
+0

完美的作品,謝謝 – dante671 2012-07-26 10:36:03