'把以下内容复制到记事本,保存为Form1.frmVERSION 5.00
Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCTL.OCX"
Begin VB.Form Form1 
   Caption         =   "Form1"
   ClientHeight    =   3030
   ClientLeft      =   60
   ClientTop       =   345
   ClientWidth     =   4680
   LinkTopic       =   "Form1"
   ScaleHeight     =   3030
   ScaleWidth      =   4680
   StartUpPosition =   3  '窗口缺省
   Begin MSComctlLib.TreeView TreeView1 
      Height          =   2535
      Left            =   120
      TabIndex        =   0
      Top             =   240
      Width           =   4335
      _ExtentX        =   7646
      _ExtentY        =   4471
      _Version        =   393217
      Style           =   7
      Appearance      =   1
   End
   Begin VB.Menu mnuPopup 
      Caption         =   "Popup"
      Visible         =   0   'False
      Begin VB.Menu mnuOpen 
         Caption         =   "Open"
      End
      Begin VB.Menu mnuDelete 
         Caption         =   "Delete"
      End
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Sub Form_Load()
    Dim i As Long
    TreeView1.Nodes.Add , , "Root", "Root"
    For i = 1 To 100
        TreeView1.Nodes.Add "Root", tvwChild, , "Node " & i
    Next i
    TreeView1.Nodes("Root").Expanded = True
End SubPrivate Sub TreeView1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    Dim NodeX As Node
    
    If Button = 2 Then
        Set NodeX = TreeView1.HitTest(x, y)
        If Not NodeX Is Nothing Then
            TreeView1.SelectedItem.Selected = False
            NodeX.BackColor = vbHighlight
            NodeX.ForeColor = vbHighlightText
            Form1.PopupMenu mnuPopup
            TreeView1.SelectedItem.Selected = True
            NodeX.BackColor = vbWindowBackground
            NodeX.ForeColor = vbWindowText
        End If
    End If
End Sub

解决方案 »

  1.   

    这只是SelectItem 和 DropHeightLight 之间的操作而已,最主要是自己要把逻辑关系搞清楚,自然什么都好做了。
      

  2.   

    to junwhj(junwhj.myrice.com)
    你的方法很有意思,不过重命名节点时怎么办。这种方法不行。
      

  3.   

    再试试:
    VERSION 5.00
    Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCTL.OCX"
    Begin VB.Form Form1 
       Caption         =   "Form1"
       ClientHeight    =   3030
       ClientLeft      =   165
       ClientTop       =   735
       ClientWidth     =   4680
       LinkTopic       =   "Form1"
       ScaleHeight     =   3030
       ScaleWidth      =   4680
       StartUpPosition =   3  '窗口缺省
       Begin MSComctlLib.TreeView TreeView1 
          Height          =   2535
          Left            =   120
          TabIndex        =   0
          Top             =   240
          Width           =   4335
          _ExtentX        =   7646
          _ExtentY        =   4471
          _Version        =   393217
          Style           =   7
          Appearance      =   1
       End
       Begin VB.Menu mnuPopup 
          Caption         =   "Popup"
          Begin VB.Menu mnuRename 
             Caption         =   "Rename"
          End
          Begin VB.Menu mnuDelete 
             Caption         =   "Delete"
          End
       End
    End
    Attribute VB_Name = "Form1"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = False
    Private SelectedNode As Node
    Private ClickedNode As Node
        
    Private Sub Form_Load()
        Dim i As Long
        TreeView1.LabelEdit = tvwManual
        TreeView1.Nodes.Add , , "Root", "Root"
        For i = 1 To 100
            TreeView1.Nodes.Add "Root", tvwChild, , "Node " & i
        Next i
        TreeView1.Nodes("Root").Expanded = True
    End SubPrivate Sub TreeView1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
        If Button = 2 Then
            Set ClickedNode = TreeView1.HitTest(x, y)
            If Not ClickedNode Is Nothing Then
                Set SelectedNode = TreeView1.SelectedItem
                TreeView1.SelectedItem.Selected = False
                ClickedNode.BackColor = vbHighlight
                ClickedNode.ForeColor = vbHighlightText
                Form1.PopupMenu mnuPopup
                TreeView1.SelectedItem.Selected = True
                ClickedNode.BackColor = vbWindowBackground
                ClickedNode.ForeColor = vbWindowText
            End If
        End If
    End SubPrivate Sub mnuRename_Click()
        Set TreeView1.SelectedItem = ClickedNode
        TreeView1.StartLabelEdit
    End SubPrivate Sub TreeView1_BeforeLabelEdit(Cancel As Integer)
        Set TreeView1.SelectedItem = SelectedNode
    End Sub