Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: VB5,VB6
Expertise: Intermediate
Jul 26, 2000

Limit the length of the text in a TreeView node

The TreeView control doesn't expose any property that lets you limit the amount of text users can type when editing a Node's label. However, you can do the trick with a couple of SendMessage API calls from within the BeforeLabelEdit event: with the TVM_GETEDITCONTROL message you retrieve the handle of the hidden Edit control that the TreeView creates for let the user edit the node. If you then send the EM_LIMITTEXT message to this Edit control you can put a limit to the text that can be typed in this control:

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _
    hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
    lParam As Any) As Long
Const TV_FIRST = &H1100
Const TVM_GETEDITCONTROL = TV_FIRST + 15
Const EM_LIMITTEXT = &HC5

' limit the text that can be typed in TreeView1's node to 20 characters

Private Sub TreeView1_BeforeLabelEdit(Cancel As Integer)
    Dim editHWnd As Long
    ' get the handle of the TreeView's Edit control
    editHWnd = SendMessage(TreeView1.hWnd, TVM_GETEDITCONTROL, 0, ByVal 0&)
    ' send it a EM_LIMITTEXT message to limit its length
    SendMessage editHWnd, EM_LIMITTEXT, 20, 0
End Sub
Once you now the method you can perform some other tricks with the Edit control. For example, you can automatically convert all text to uppercase:

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _
    hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
    lParam As Any) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
    (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
    (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Const GWL_STYLE = (-16)

Const TV_FIRST = &H1100
Const TVM_GETEDITCONTROL = TV_FIRST + 15
Const ES_UPPERCASE = &H8&

' force the text typed in a TreeView's node to uppercase

Private Sub TreeView1_BeforeLabelEdit(Cancel As Integer)
    Dim editHWnd As Long
    
    ' get the handle of the TreeView's Edit control
    editHWnd = SendMessage(TreeView1.hWnd, TVM_GETEDITCONTROL, 0, ByVal 0&)
    ' force the all-uppercase style
    SetWindowLong editHWnd, GWL_STYLE, GetWindowLong(editHWnd, _
        GWL_STYLE) Or ES_UPPERCASE
End Sub

Francesco Balena
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date