Die Community zu .NET und Classic VB.
Menü

FAQ 0145: Wie kann man den ToolTipText für die TreeView-Nodes ausblenden?

 von 

Frage 

Wie kann man den ToolTipText für die TreeView-Nodes ausblenden?

Antwort  

Bei längeren Texten in einem TreeView-Node, die über die Begrenzung des TreeViews hinausreichen, erscheint eine ToolTipText-Box mit dem Text aus dem Node. Leider gibt es keine Eigenschaft für das TreeView, mit der sich diese ToolTipText-Box ein- oder ausschalten lässt.
Über einen kleinen Umweg lässt sich diese Funktion für das TreeView nachrüsten. Die normale ToolTipText-Box des TreeView bleibt davon unberührt:

'   Modul
Option Explicit

Private Declare Function GetWindowLong Lib "user32" _
                Alias "GetWindowLongA" ( _
                ByVal hwnd As Long, _
                ByVal nIndex As Long) 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 Const TVS_NOTOOLTIPS As Long = &H80
Private Const GWL_STYLE As Long = (-16)

'------------------------------------------------------
' Funktion     : TreeviewNodeToolTipText
' Beschreibung : ToolTipText-Box für Nodes bei einem
'                Treeview ein oder ausschalten
' Übergabewert : Trv = TreeView
'                Optional NodeToolTipText = True (ausschalten)
'                                         = False (einschalten)
' Rückgabewert : True = Aktion war erfolgreich
'                False = Aktion war nicht erfolgreich
'------------------------------------------------------
Public Function TreeviewNodeToolTipText( _
                ByVal Trv As TreeView, _
                Optional ByVal NodeToolTipText As Boolean = True _
                ) As Boolean
    Dim lngCurrentStyle As Long
    Dim Result As Long

    lngCurrentStyle = GetWindowLong(Trv.hwnd, GWL_STYLE)

    If NodeToolTipText Then
        lngCurrentStyle = lngCurrentStyle Or TVS_NOTOOLTIPS
    Else
        If (lngCurrentStyle And TVS_NOTOOLTIPS) = TVS_NOTOOLTIPS Then
            lngCurrentStyle = lngCurrentStyle Xor TVS_NOTOOLTIPS
        End If
    End If

    Result = SetWindowLong(Trv.hwnd, GWL_STYLE, lngCurrentStyle)
    Call Trv.Refresh
    DoEvents
    TreeviewNodeToolTipText = (Result <> 0)
End Function

Listing 1: ToolTipText bei TreeView-Nodes abschalten

'   Formular
Option Explicit

Private Sub Form_Load()
    ' Node ToolTipText-Box abschalten
    Call TreeviewNodeToolTipText(TreeView1, True)

    ' Node ToolTipText-Box einschalten
    ' Call TreeviewNodeToolTipText(TreeView1, False)

    ' normale ToolTipText-Box
    TreeView1.ToolTipText = "Der normale ToolTipText"
    
    Call TreeView1.Nodes.Add(, , "a", _
                            "Ein relativ langer Text in diesem Node")
    Call TreeView1.Nodes.Add("a", tvwChild, "b", _
                            "Ein relativ langer Text in diesem Node")
    Call TreeView1.Nodes.Add("b", tvwChild, "c", _
                            "Ein relativ langer Text in diesem Node")
End Sub

Listing 2: Beispiel für den Aufruf

Ihre Meinung  

Falls Sie Fragen zu dieser FAQ haben, Ihre Erfahrung mit anderen Nutzern austauschen möchten oder auf eine Ergänzung hinweisen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.