1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
// **********************************************
// Dies ist eines der 322 Rezepte aus dem
// C# 2005 Premium Codebook.
// Das Snippet wurde vom Autor mit freundlicher
// Genehmigung von Addison Wesley
// bei dotnet-snippets.de veröffentlicht.
// **********************************************
/// <summary>
/// ListBox, die für Einträge, die nicht vollständig sichtbar sind, einen
/// ToolTip anzeigt
/// </summary>
public class ToolTipListBox : ListBox
{
/// <summary>
/// Verwaltet den ToolTip
/// </summary>
private ToolTip toolTip = new ToolTip();
/// <summary>
/// Setzt den ToolTip mit dem Eintrag, der gerade unter der Maus liegt,
/// wenn der Eintrag nicht komplett angezeigt wird
/// </summary>
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
// Ermitteln des Eintrags unter der Maus
Point p = base.PointToClient(Cursor.Position);
int index = base.IndexFromPoint(p);
if (index > -1)
{
string item = base.Items[index].ToString();
// Überprüfen, ob der Eintrag in der Breite in die Liste passt
using (Graphics g = base.CreateGraphics())
{
int width = (int)g.MeasureString(item, base.Font,
0, StringFormat.GenericTypographic).Width;
if (width > base.ClientRectangle.Width)
{
// ToolTip setzen
this.toolTip.SetToolTip(this, item);
}
else
{
// ToolTip zurücksetzen
this.toolTip.SetToolTip(this, null);
}
}
}
else
{
// ToolTip zurücksetzen
this.toolTip.SetToolTip(this, null);
}
}
/// <summary>
/// Setzt den ToolTip wieder zurück
/// </summary>
protected override void OnMouseLeave(EventArgs e)
{
base.OnMouseLeave(e);
// ToolTip zurücksetzen
this.toolTip.SetToolTip(this, null);
}
}
|