2013-10-11 5 views
0

VB2010 У меня довольно хорошая процедура в NodeMouseClick дерева, которая скрывает/отображает панели в форме в зависимости от того, какой пользователь щелкнул пользователем. Упрощенная версия:.NET Имитация NodeMouseClick в Treeview

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

Ahhhhh ... так просто его один из тех «почему не сделал я подумайте об этом ». Я думаю, я передумал. позвольте мне дать это выстрел. – sinDizzy

+0

Работает отлично !. Благодарю. Единственное, что я добавил, это после .SelectedNode Я поместил .Select(), иначе узел по умолчанию не подсвечивается. – sinDizzy