Change font ToolTip

I need a tooltip with a custom font.

I have the following code and it works ... but the size of the tooltip does not match the text.

Where is the mistake?

Public Class KeolisTooltip Inherits ToolTip Sub New() MyBase.New() Me.OwnerDraw = True AddHandler Me.Draw, AddressOf OnDraw End Sub Private _Font As Font Public Property Font() As Font Get Return _Font End Get Set(ByVal value As Font) _Font = value End Set End Property Public Sub New(ByVal Cont As System.ComponentModel.IContainer) MyBase.New(Cont) Me.OwnerDraw = True AddHandler Me.Draw, AddressOf OnDraw End Sub Private Sub OnDraw(ByVal sender As Object, ByVal e As DrawToolTipEventArgs) Dim newArgs As DrawToolTipEventArgs If _Font Is Nothing Then newArgs = e Else Dim newSize As Size = Size.Round(e.Graphics.MeasureString(e.ToolTipText, Me._Font)) Dim newBounds As New Rectangle(e.Bounds.Location, newSize) newArgs = New DrawToolTipEventArgs( _ e.Graphics, _ e.AssociatedWindow, _ e.AssociatedControl, _ newBounds, _ e.ToolTipText, _ Me.BackColor, _ Me.ForeColor, _ Me._Font) End If newArgs.DrawBackground() newArgs.DrawBorder() newArgs.DrawText() End Sub End Class 
+4
source share
2 answers

Size.Round (from the MSDN page)

Converts the specified SizeF structure to a size structure, rounding the values ​​of the SizeF structure to the nearest integer values.

(my emphasis).

Therefore, if

 e.Graphics.MeasureString(e.ToolTipText, Me._Font) 

gives values ​​23.4 and 42.1 (say), then they will be rounded to 23 and 42 respectively, so your tooltip will be a little too small.

+2
source

Could you try adding resizing logic to the OnResize event in addition to the OnDraw event? I think you will get the correct values ​​at this event. Just try and let it know if it works.

0
source

All Articles