Custom Tooltips in PowerShell Forms using OwnerDraw

Other Posts in this Series:

This post provides an example of how we can override the default behaviour to show custom tooltips in PowerShell Forms using OwnerDraw.

Add-Type -AssemblyName System.Drawing
#define brushes for black and white
$whiteBrush = new-object Drawing.SolidBrush White
$blackBrush = new-object Drawing.SolidBrush Black
#create form
$form = New-Object System.Windows.Forms.Form
$alkaneButton = New-Object System.Windows.Forms.Button
$alkaneButton.Size = New-Object System.Drawing.Size(200, 40)
$alkaneButton.Location = New-Object System.Drawing.Size(20, 20)
$alkaneButton.Text = "Alkane Button"
$form.Controls.Add($alkaneButton)
$tooltip1 = New-Object System.Windows.Forms.ToolTip
$tooltip1.SetToolTip($alkaneButton, "This is a tooltip.")
$tooltip1.OwnerDraw = $true 
$tooltip1_Draw=[System.Windows.Forms.DrawToolTipEventHandler]{
#define custom font
$fontstyle = new-object System.Drawing.Font('Segoe UI', 9, [System.Drawing.FontStyle]::Regular)
#configure alignment
$format = [System.Drawing.StringFormat]::GenericTypographic
$format.LineAlignment = [System.Drawing.StringAlignment]::Center
$format.Alignment = [System.Drawing.StringAlignment]::Center    
#draw tooltip    
$_.Graphics.FillRectangle($blackBrush, $_.Bounds)
$_.Graphics.DrawString($_.ToolTipText, $fontstyle, $whiteBrush, ($_.Bounds.X + ($_.Bounds.Width/2)), ($_.Bounds.Y + ($_.Bounds.Height/2)), $format)         
}
$tooltip1.Add_Draw($tooltip1_Draw)
$Add_FormClosed=
{
try
{
$tooltip1.Remove_Draw($tooltip1_Draw)
}
catch { Out-Null }
}
[void]$form.ShowDialog()