Hi zusammen.
Ich hab' mir ne Methode gebaut, um mir ToolTips über Labels anzeigen zu lassen,
dazu nutze ich die
Einfache Variante: Funzt, ToolTips werden aber leider doppelt angezeigt:
Spoiler anzeigen
Aufruf im
Komplexere Variante: funzt derzeit nicht - hätte ich aber gerne, dann wäre das schön allgemein verwendbar:
Spoiler anzeigen
Und ich hätte das gerne noch allgemeiner, dann brauch ich nicht jedes Label per Hand registrieren. Vorgestellt hab ich mir das so:
Aufruf dann im Form-Load mit
Ich muss den Aufbau ja irgendwie rekursiv durchgehen, denn die Labels sind echt verschachtelt:
(es gibt aber sicher auch Forms bei mir, wo die Labels direkt draufliegen -> das muss damit ja dann auch funzen )
Form -> Panel -> TableLayoutPanel -> GroupBox -> Label
jemand eine Idee (am liebsten für die komplexe Lösung) + eine Idee dazu, dass die Labels nicht mehr doppelt angezeigt werden...
Ich hab' mir ne Methode gebaut, um mir ToolTips über Labels anzeigen zu lassen,
dazu nutze ich die
Tag
-Eigenschaft der Labels - darin steht dann der entsprechende Tooltip-TextEinfache Variante: Funzt, ToolTips werden aber leider doppelt angezeigt:
VB.NET-Quellcode
- #Region "LabelToolTip"
- Public Sub RegisterLabelToolTip(ParamArray labels As Label())
- For Each lbl In labels
- AddHandler lbl.MouseHover, AddressOf lbl_mousehover
- Next
- End Sub
- Private Sub lbl_mousehover(sender As Object, e As EventArgs)
- Dim lbl = DirectCast(sender, Label)
- Dim tt As New ToolTip
- If Not lbl.Tag.ToString = "" Then tt.Show(lbl.Tag.ToString, lbl)
- End Sub
- #End Region 'LabelToolTip
Aufruf im
frm_Load
RegisterLabelToolTip(StartKMLabel, EndKMLabel)
Komplexere Variante: funzt derzeit nicht - hätte ich aber gerne, dann wäre das schön allgemein verwendbar:
Und ich hätte das gerne noch allgemeiner, dann brauch ich nicht jedes Label per Hand registrieren. Vorgestellt hab ich mir das so:
VB.NET-Quellcode
- #Region "LabelToolTip"
- <Extension>
- Public Sub RegisterLabelToolTip(frm As Form)
- Dim lstLBL = WalkThroughForm(frm)
- For Each lbl In lstLBL
- If Not lbl.Tag.ToString = "" Then AddHandler lbl.MouseHover, AddressOf lbl_mousehover
- Next
- End Sub
- Private Sub lbl_mousehover(sender As Object, e As EventArgs)
- Dim lbl = DirectCast(sender, Label)
- Dim tt As New ToolTip
- tt.Show(lbl.Tag.ToString, lbl)
- End Sub
- Private Function WalkThroughForm(frm As Form) As List(Of Label)
- Dim lstLBL As New List(Of Label)
- Dim recurse As Action(Of Control.ControlCollection) = Sub(ctlC As Control.ControlCollection)
- For Each ctl As Control In ctlC
- Dim lbl = TryCast(ctl, Label)
- If lbl IsNot Nothing Then
- lstLBL.Add(lbl)
- End If
- recurse(ctlC)
- Next
- End Sub
- recurse(frm.Controls)
- Return lstLBL
- End Function
- #End Region 'LabelToolTip
Aufruf dann im Form-Load mit
Me.RegisterLabelToolTip
Ich muss den Aufbau ja irgendwie rekursiv durchgehen, denn die Labels sind echt verschachtelt:
(es gibt aber sicher auch Forms bei mir, wo die Labels direkt draufliegen -> das muss damit ja dann auch funzen )
Form -> Panel -> TableLayoutPanel -> GroupBox -> Label
jemand eine Idee (am liebsten für die komplexe Lösung) + eine Idee dazu, dass die Labels nicht mehr doppelt angezeigt werden...
"Na, wie ist das Wetter bei dir?"
"Caps Lock."
"Hä?"
"Shift ohne Ende!"
"Caps Lock."
"Hä?"
"Shift ohne Ende!"
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „tragl“ ()