| |
VB.NET - Ein- und UmsteigerToolStripMenuItems custom tooltip | | | Autor: Novatlan | Datum: 31.08.22 16:24 |
| Hi!
Ich habe auf meinem Form einen Toolstrip, der mehrere ToolStripDrowDownButtons enthält. Diese haben ToolStripMenuItems.
Für den ToolStrip habe ich mir eine abgeleitete Klasse gebaut, die ein eigenes ToolTip control enthält, das per OwnerDraw=True gestaltet wird. Wenn man über irgendein Control innerhalb des ToolStrips hovert, wird das ToolTip auch schön angezeigt.
Das funktioniert aber nicht mit den ToolStripMenuItems. Die benutzen die Standard ToolTip-Optik. Wenn ich über eines dieser ToolStripMenuItems hovere, wird im ToolStrip auch kein Hover-Event ausgelöst. Vermutlich weil die ToolStripMenuItems naütrlich außerhalb des ToolStrips in einem Dropdown-Menü erscheinen.
Ich suche jetzt verzweifelt, wie ich den ToolStripMenuItems auch meine hübschen custom ToolTips angedeihen lassen kann
Ich habe viele Stunden gesucht (ja, wirklich), und außer 1 Person auf Stackoverflow (ohne Antwort) nichts gefunden...
beste Grüße!
Novatlan | |
Re: ToolStripMenuItems custom tooltip | | | Autor: Manfred X | Datum: 31.08.22 23:41 |
| Hallo!
Mit dem Problem habe ich mich noch nicht befasst.
Die Toolstripmenuitem-Klasse (Windows.Forms) besitzt keine "OwnerDraw"-Eigenschaft.
Eine Möglichkeit könnte sein, beim Öffnen des Items dessen Bound-Eigenschaft abzufragen
(Position und Größe) und diesen Bereich durch ein geeignet gestaltetes Label oder eine
Bitmap zu überlagern. Damit könnte man auch Hover-Ereignisse erhalten. | |
Re: ToolStripMenuItems custom tooltip | | | Autor: Novatlan | Datum: 03.09.22 15:48 |
| Hi!
Danke! Das hat mich auf die richtige Idee gebracht... falls jemand anderes das gleiche Problemchen hat, Code untenstehend für ein custom control, basierend auf dem normalen ToolStripMenuItem, das einen neuen Tooltip-Parameter hat, sowie einen CustomToolTipText Parameter für den anzuzeigenden Text. Das Tooltip und der Text können im Designer zugewiesen werden, das neue Control dann einfach statt des Standard-ToolStripMenuItem verwenden.
Public Class cls_toolStripMenuItem
Inherits ToolStripMenuItem
Private _mouseOverPoint As Point
Private ReadOnly _timer As Timer
Public WithEvents Tooltip As ToolTip
Public ToolTipInterval As Integer = 4000
Public CustomToolTipText As String = ""
Protected Overrides Sub OnMouseMove(ByVal mea As MouseEventArgs)
MyBase.OnMouseMove(mea)
If Math.Abs(_mouseOverPoint.X - mea.X) > _
SystemInformation.MouseHoverSize.Width OrElse Math.Abs( _
_mouseOverPoint.Y - mea.Y) > _
SystemInformation.MouseHoverSize.Height Then
_mouseOverPoint = mea.Location
If Tooltip IsNot Nothing Then Tooltip.Hide(Me.Parent)
_timer.Stop()
_timer.Start()
End If
End Sub
Protected Overrides Sub OnClick(ByVal e As EventArgs)
MyBase.OnClick(e)
If Tooltip IsNot Nothing Then Tooltip.Hide(Me.Parent)
End Sub
Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
MyBase.OnMouseUp(e)
End Sub
Protected Overrides Sub OnMouseLeave(ByVal e As EventArgs)
MyBase.OnMouseLeave(e)
_timer.Stop()
If Tooltip IsNot Nothing Then Tooltip.Hide(Me.Parent)
_mouseOverPoint = New Point(-50, -50)
End Sub
Private Sub timer_Tick(ByVal sender As Object, ByVal e As EventArgs)
_timer.Stop()
Try
If Not Equals(CustomToolTipText, Nothing) AndAlso _
CustomToolTipText.Length > 0 Then
Dim tipPoint As Point = New Point(Me.Bounds.Location.X + 50, _
Me.Bounds.Location.Y + 50)
tooltip.Show(CustomToolTipText, Me.Parent, tipPoint, _
ToolTipInterval)
End If
Catch
'Just catching if there's no mouseoverpoint.
End Try
End Sub
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
MyBase.Dispose(disposing)
If disposing Then
_timer.Dispose()
tooltip.Dispose()
End If
End Sub
Public Sub New()
MyBase.New()
_timer = New Timer With {
.Enabled = False,
.Interval = SystemInformation.MouseHoverTime
}
AddHandler _timer.Tick, New EventHandler(AddressOf timer_Tick)
End Sub
End Class | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevWizard für VB5/6
Professionelle Assistenten im Handumdrehen
Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|