C# MenuStrip Border

DaMoN1993

Commander
Registriert
Dez. 2006
Beiträge
2.118
Hallo Forums,
Ich bin gerade daran ein GUI für eine meiner Anwendungen zu entwerfen.
Oben soll ein Menü Platziert sein was das klassische Datei, Anzeige, Einstellungen, About (etc) bietet. Nur habe ich ein darstellungsproblem:
Das Menü soll etwas "abgegrenzter" sein als es standardmäßig ist. Mit den RenderModes System, Professional und ManagerRenderMode habe ich es schon versucht. Einzig "System" bringt bei mir eine Trennlinie, aber nicht die gewünschte "border"-linie.
Hier sind einmal RenderMode System (weiße linie) und Manager/Professional (keine trennlinie), und eine linie wie ich sie gern hätte.



Das Projekt soll übrigens .net 3.0 kompatibel sein und Windows Forms verwenden.

Ich habe mir schon die Eigenschaften vom MenuStrip angeguckt allerdings fand ich nichts womit sich irgend eine Art von Rand einstellen lässt (Außer Separator für einzelne menü-elemente).
"lustiger"weise Ist die linie wie ich sie haben will von einem StatusStrip, welches im "System" modus gerendert wird.
Kann mir da jemand helfen?

MfG
Damon
 
Da es kein Property dafür gibt, geht es nur über eine eigene Subklasse von ToolStripSystemRenderer:
Code:
public class MyRenderer: ToolStripSystemRenderer {
	// Diese methode zeichnet die Rahmen um die Menustrip-Elemente
	protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e) {
		// Alle Untermenüpunkte normal zeichnen
		if (!e.AffectedBounds.Equals(e.ToolStrip.Bounds))
			base.OnRenderToolStripBorder(e);
		else {
			// Äussere Rand nur eine 3D-Box am unteren Rand
			ControlPaint.DrawBorder3D(e.Graphics, e.AffectedBounds.Left, e.AffectedBounds.Bottom-3, e.AffectedBounds.Right, 3, Border3DStyle.Etched, Border3DSide.Bottom | Border3DSide.Top);
		}
	}
}

Nach "InitializeComponent();" einfach das einfügen:

menuStrip1.Renderer = new MyRenderer();
 
Zurück
Oben