2013-10-11 2 views
0

VB2010 사용자가 클릭 한 노드에 따라 폼의 패널을 숨기거나 표시하는 TreeView의 NodeMouseClick에 꽤 좋은 루틴이 있습니다. 단순화 된 버전 :.NET Simulate TreeView의 NodeMouseClick

Private Sub tvw_NodeMouseClick(sender As Object, e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles tvw.NodeMouseClick 
     Dim pNode As TreeNode = e.Node  'get the node that was clicked 
     Dim nodeName As String = pNode.Name 'get the name of the node 

     Select Case nodeName.ToLower 
      Case "gen" 
       pnlGeneral.Visible = True 
       pnlOrigin.Visible = False 
      Case "ogn" 
       pnlGeneral.Visible = False 
       pnlOrigin.Visible = True 
      Case Else 
       'do nothing 
     End Select 
End Sub 

내 문제가 폼로드에 내가 실제로 기본 선택 노드 또는 사용자가 기본 노드를 클릭 한 것과 할 일을합니다.

Private Sub frm_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
     'initialize the treeview 
     With tvw 
      .Nodes.Add("gen", "General", "gen", "gen") 
      .Nodes.Add("ogn", "Origin", "ogn", "ogn") 
      .SelectedNode = .Nodes.Item("gen") 
     End With 
End Sub 

은 .SelectedNode이 작업을 수행하지 않고 .NET에서이 작업을 수행하는 방법을 알아 내려고 노력하고있다. VB6에서는 tvw_NodeClick tvw.Nodes ("gen")를 사용했습니다.

답변

1

이벤트를 발생 시키려고 시도 할 때 tvw_NodeMouseClick()을 직접 호출 할 수 있습니다. 그러나 그것은 논쟁 때문에 약간 짜증납니다.

Private Sub NodeSelect(pNode As TreeNode) 
    Dim nodeName As String = pNode.Name ''get the name of the node 

    Select Case nodeName.ToLower 
     Case "gen" 
      pnlGeneral.Visible = True 
      pnlOrigin.Visible = False 
     Case "ogn" 
      pnlGeneral.Visible = False 
      pnlOrigin.Visible = True 
     Case Else 
      ''do nothing 
    End Select 
End Sub 

Private Sub tvw_NodeMouseClick(sender As Object, e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles tvw.NodeMouseClick 
    NodeSelect(e.Node) 
End Sub 

가 지금은 간단하다 : 단순히 다시 사용하고자하는 부분의 코드를 리팩토링과 탈옥 간단

Private Sub frm_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
    With tvw 
     Dim node = .Nodes.Add("gen", "General", "gen", "gen") 
     .Nodes.Add("ogn", "Origin", "ogn", "ogn") 
     .SelectedNode = node 
     NodeSelect(node) 
    End With 
End Sub 
+0

아 ~~~ !! ... 그 사람들 "하지 않았다하는 이유 중 하나 생각해라. " 나는 내가 그것을 과도하게 생각하고 있었다라고 생각한다. 내가 그걸 줄께. – sinDizzy

+0

위대한 작품!. 감사. 내가 추가 한 유일한 것은 .SelectedNode 다음에 .Select()를 넣었습니다. 그렇지 않으면 기본 노드가 강조 표시되지 않습니다. – sinDizzy