VB.NET – How to set tooltips on the .NET ListView subkey

I am trying to set tooltip text for some subitems in the listview control. I cannot get the tooltip displayed.

Does anyone have any suggestions? ?

Private _timer As Timer
Private Sub Timer()
If _timer Is Nothing Then
_timer = New Timer
_timer. Interval = 500
AddHandler _timer.Tick, AddressOf TimerTick
_timer.Start()
End If
End Sub
Private Sub TimerTick(ByVal sender As Object, ByVal e As EventArgs)
_timer.Enabled = False
End Sub

Protected Overrides Sub OnMouseMove(ByVal e As System.Windows.Forms.MouseEventArgs)
If Not _timer. Enabled Then
Dim item = Me.HitTest(eX, eY)
If Not item Is Nothing AndAlso Not item.SubItem Is Nothing Then
If item.SubItem.Text = "" Then
Dim tip = New ToolTip
Dim p = item.SubItem.Bounds
tip.ToolTipTitle = "Status"
tip.ShowAlways = True
tip.Show("FOO" , Me, eX, eY, 1000)
_timer.Enabled = True
End If
End If
End If

MyBase.OnMouseMove(e)
End Sub

ObjectListView (an open source wrapper around .NET WinForms ListView) has built-in support for cell tooltips (yes, it does work in VB). You listen to a CellToolTip event , You can do something like this (this is undoubtedly excessive):

alt text http://i31.tinypic.com/20udbgo.png

If you don’t want To use ObjectListView, you need to inherit ListView, listen to WM_NOTIFY messages, and then respond to TTN_GETDISPINFO notifications in a similar way to these messages:

case TTN_GETDISPINFO:
ListViewHitTestInfo info = this.HitTest(this.PointToClient(Cursor.Position));
if (info.Item != null && info.SubItem != null) {
// Call some method of your own to get the tooltip you want
String tip = this.GetCellToolTip(info.Item, info.SubItem);
if (!String.IsNullOrEmpty(tip)) {
NativeMethods.TOOLTIPTEXT ttt = (NativeMethods.TOOLTIPTEXT)m.GetLParam(typeof(NativeMethods.TOOLTIPTEXT));
ttt.lpszText = tip;
if (this.Ri ghtToLeft == RightToLeft.Yes)
ttt.uFlags |= 4;
Marshal.StructureToPtr(ttt, m.LParam, false);
return; // do not do normal processing
}
}
break;

Obviously, this is C#, not VB, but you get the idea.

I am trying to set tooltip text for some subitems in the listview control. I cannot get the tooltip displayed.

Does anyone have any suggestions?

Private _timer As Timer
Private Sub Timer()
If _timer Is Nothing Then
_timer = New Timer
_timer. Interval = 500
AddHandler _timer.Tick, AddressOf TimerTick
_timer.Start()
End If
End Sub
Private Sub TimerTick(ByVal sender As Object, ByVal e As EventArgs)
_timer.Enabled = False
End Sub

Protected Overrides Sub OnMouseMove(ByVal e As System.Windows.Forms.MouseEventArgs)
If Not _timer. Enabled Then
Dim item = Me.HitTest(eX, eY)
If Not item Is Nothing AndAlso Not item.SubItem Is Nothing Then
If item.SubItem.Text = "" Then
Dim tip = New ToolTip
Dim p = item.SubItem.Bounds
tip.ToolTipTitle = "Status"
tip.ShowAlways = True
tip.Show("FOO" , Me, eX, eY, 1000)
_timer.Enabled = True
End If
End If
End If

MyBase.OnMouseMove(e)
End Sub

< p>ObjectListView (an open source wrapper around .NET WinForms ListView) has built-in support for cell tooltips (yes, it does work in VB). You listen to a CellToolTip event, and you can do something like this (this is undoubtedly excessive ):

alt text http://i31.tinypic.com/20udbgo.png

If you don’t want to use ObjectListView, you need to inherit ListView and listen for WM_NOTIFY messages , And then in these messages, respond to the TTN_GETDISPINFO notification in a similar way:

case TTN_GETDISPINFO:
ListViewHitTestInfo info = this.HitTest(this.PointToClient(Cursor .Position));
if (info.Item != null && info.SubItem != null) {
// Call some method of your own to get the tooltip you want
String tip = this.GetCellToolTip(info.Item, info.SubItem);
if (!String.IsNullOrEmpty(tip)) {
NativeMethods.TOOLTIPTEXT ttt = (NativeMethods.TOOLTIPTEXT)m.GetLParam(typeof(NativeMethods .TOOLTIPTEXT));
ttt.lpszText = tip;
if (this.RightToLeft == RightToLeft.Yes)
ttt.uF lags |= 4;
Marshal.StructureToPtr(ttt, m.LParam, false);
return; // do not do normal processing
}
}
break ;

Obviously, this is C#, not VB, but you get the idea.

Leave a Comment

Your email address will not be published.