HowTo: Custom ToolStrip Rendering für Windows Forms
Heute möcht ich mal kurz und bündig erklären, wie man es ohne allzugroßen Aufwand schafft, ein Windows Forms ToolStrip-Control so zu customizen, das es dem Layout und Design der eigenen Anwendungen entspricht. Will man ein ToolStrip-Control an die eigenen Bedürfnisse anpassen, hat man grundsätzlich 2 Möglichkeiten. Beide Varianten haben gemeinsam, dass man zuerst ein CustomControl erstellt und dies von System.Windows.Forms.ToolStrip ableitet:
public partial class CustomToolStrip : System.Windows.Forms.ToolStrip
{
public CustomToolStrip()
{
InitializeComponent();
}
}
Nachdem wir das Control haben, möchten wir es anpassen. Jetzt können wir einerseits in der OnPaint() Methode das gesamte Control selbst neu rendern. Das führt dazu, dass wir alles neu und selbst zeichnen müssen (also alle Buttons, Items, Rahmen, Hintergrund, etc.) und die notwendige Funktionalität (Click, Hover, etc. – Events) implementieren. Das bedeutet natürlich einen ehrheblichen Aufwand. Daher verwenden wir eine bereits im .NET Framework mitgelieferte Klasse names System.Windows.Forms.ToolStripRenderer.
System.Windows.Forms.ToolStripRenderer
Leitet man eine Klasse von dieser Basisklasse ab, hat man zahlreiche Möglichkeiten, in den Renderprozess des ToolStrip-Controls einzugreifen (genaueres findet man hiert http://msdn.microsoft.com/en-us/library/system.windows.forms.toolstriprenderer.aspx). Implementieren wir die Klasse, können wir zB in den Renderprozess des Rahmens eingreifen:
public class CustomToolStripRenderer : System.Windows.Forms.ToolStripRenderer
{
protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
{
e.Graphics.DrawLine(new System.Drawing.Pen(Color.Red),
0, e.AffectedBounds.Height - 1,
e.AffectedBounds.Width, e.AffectedBounds.Height - 1);
}
}
Damit wir den Renderer auch anwenden, reicht es, in dem CustomToolStrip Control die Property Renderer auf einen neue Instanz des ToolStripRenderers zu setzen:
this.Renderer = new CustomToolStripRenderer();
In diesem Sinne. Beispielcode gitbs wie immer hier.
