Tooltips können auf diese Weise nur einem Control zugeordnet werden.
Aber mit einer Picturebox und einem Timer läßt sich die Tooltip-Funktionalität
nachbauen - etwa so ....
Public Class frmGridRow_PicTip
Dim dt As New DataTable
Dim WithEvents dgv As New DataGridView With _
{.Parent = Me, .Dock = DockStyle.Fill, _
.AllowUserToAddRows = False}
'Picturebox für Bildanzeige
Dim img As New PictureBox With _
{.Parent = dgv, .Visible = False}
Dim WithEvents timTip As New Timer With _
{.Interval = 250, .Enabled = True}
'Array mit den Bildern für die Grid-Zeilen
Dim pictip() As Image
Private Sub frmGridTip_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
'Testdaten erzeugen
dt.Columns.Add("SP1")
dt.Columns.Add("SP2")
ReDim pictip(9)
For i As Integer = 0 To 8
'Zeilen erstellen
dt.Rows.Add("Zelle " & (i + 1).ToString & "1", _
"Zelle " & (i + 1).ToString & "2")
'Für jede Zeile eine Bitmap erstellen, die als Tooltip fungiert
pictip(i) = New Bitmap(100, 60)
Using g As Graphics = _
Graphics.FromImage(pictip(i)), br As New SolidBrush( _
dgv.ForeColor)
g.Clear(Color.Yellow)
g.DrawString("Zeile " & CStr(i + 1), dgv.Font, br, 4, 4)
End Using
Next i
dgv.DataSource = dt
End Sub
Dim displaytime As Date 'Zeitpunkt für Tip-Anzeige
Private Sub timTip_Tick(sender As Object, _
e As System.EventArgs) Handles timTip.Tick
'Zeitdauer seit dem Tipp-Zeitpunkt
Dim displayed As New TimeSpan(Now.Ticks - displaytime.Ticks)
'Zeitsteuerung
Select Case displayed
Case Is < New TimeSpan(0, 0, 2)
'Der Tipp-Zeitpunkt liegt weniger als 2 Sekunden zurück
img.Visible = False
Case Is < New TimeSpan(0, 0, 6)
'Der Tipp-Zeitpunkt liegt 2-6 Sekunden zurück
img.Visible = True
Case Else
img.Visible = False
End Select
End Sub
Private Sub dgv_MouseMove(sender As Object, _
e As System.EventArgs) Handles dgv.MouseMove
'Umrechnung Mausposition (Screen-Koordinaten)
'auf Grid-Koordinaten
Dim xy As Point = PointToClient _
(New Point(MousePosition.X, MousePosition.Y))
'Klasse unter der Maus ermitteln
Dim hti As DataGridView.HitTestInfo = dgv.HitTest(xy.X, xy.Y)
Static rowindex As Integer = -1 'aktuelle Zeile merken
If hti.RowIndex = -1 Then
'Keine Gridzeile unter der Maus
img.Visible = False
rowindex = -1
ElseIf Not hti.RowIndex = rowindex Then
'Die Maus bewegt sich über einer neuen Zeile ....
rowindex = hti.RowIndex
'Zeilenbez. Bild auf Picturebox zuweisen
img.Image = pictip(rowindex)
'Picturebox positionieren
img.Location = _
New Point(xy.X + 5, hti.rowY + dgv.Rows(rowindex).Height)
'Tipp-Zeitpunkt notieren
displaytime = Now
End If
End Sub
End Class
Beitrag wurde zuletzt am 25.03.15 um 00:14:04 editiert. |