Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Const EM_LIMITTEXT = &HC5
Const TV_FIRST As Long = &H1100
Const TVM_GETNEXTITEM As Long = (TV_FIRST + 10)
Const TVM_GETEDITCONTROL As Long = (TV_FIRST + 15)
Private Sub Command2_Click()
TreeView1.StartLabelEdit '自动处于编辑状态
End Sub
'treeview1.LabelEdit =tvwAutomatic
'主要对treeview的BeforeLabelEdit,AfterLabelEdit事编程
Private Sub TreeView1_AfterLabelEdit(Cancel As Integer, NewString As String)
On Error GoTo vbErrorHandler
If Len(NewString) = 0 Then
MsgBox "你必须输入一个名称"
Cancel = True
Exit Sub
End If
Dim i As Long
For i = 1 To TreeView1.Nodes.Count
If TreeView1.Nodes(i).Text = NewString Then
MsgBox "结点已经存在!", vbExclamation
TreeView1.StartLabelEdit
Exit Sub
End If
Next
Exit Sub
vbErrorHandler:
MsgBox Err.Number & " " & Err.Description
End Sub
Private Sub TreeView1_BeforeLabelEdit(Cancel As Integer)
Dim lEditHWND As Long
'得到treeview上编辑框的句柄
lEditHWND = SendMessageLong(TreeView1.hwnd, TVM_GETEDITCONTROL, 0, 0)
' 限制到20个字符
If lEditHWND > 0 Then
SendMessageLong lEditHWND, EM_LIMITTEXT, 20, 0
End If