2009-10-20 14 views
16

Ich bin auf der Suche nach einer Split-Schaltfläche in .NET WinForms. Die Art, bei der eine Seite eine Schaltfläche ist und die andere Seite eine Dropdown-Schaltfläche hat.Split-Schaltfläche in .NET Winforms

Ich sehe sie überall in Windows verwendet, wie im Visual Studio Speichern unter Fenster, so dass ich dachte, dass sie die Kontrolle in einer Bibliothek haben müssen.

Ich weiß, es gibt einen für Toolstrips, aber ich brauche einen, der außerhalb von Toolstrips verwendbar ist.

Gibt es eine Microsoft-Bibliothek, die eine oder vorzugsweise eine freie Bibliothek hat? Ich verwende .NET 3.5

Ein Beispiel: Example Button

+0

Ha, ich wusste nicht, dass das Bild ein von .NET l war ibrary. Ich habe gerade eine Google-Bildersuche auf Split-Button und wählte nur die beste aussehende, die ich gefunden habe. – Jamiegs

Antwort

4

Sie können sich eine einfache Version tun, das Bild der Taste. Ich habe meine eigene Klasse, die von Button abgeleitet ist.

stelle ich das Bild nach oben (die aus einem Pfeil nach unten ist) wie folgt:

{ 
    this.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; 
    this.Image = YourResources.split_button; // Your down-arrow image 

    this.TextImageRelation = System.Windows.Forms.TextImageRelation.TextBeforeImage; 
} 


protected override void OnClick(EventArgs e) 
{ 
    var clickPos = this.PointToClient(new System.Drawing.Point(MousePosition.X, MousePosition.Y)); 

    // If click is over the right-hand portion of the button show the menu 
    if (clickPos.X >= (Size.Width - Image.Width)) 
     ShowMenuUnderControl() 
    else 
     base.OnClick(e); 
} 

// If you want right-mouse click to invoke the menu override the mouse up event 
protected override void OnMouseUp(MouseEventArgs mevent) 
{ 
    if ((mevent.Button & MouseButtons.Right) != 0) 
     ShowMenuUnderControl(); 
    else 
     base.OnMouseUp(mevent); 
} 

// Raise the context menu 
public void ShowMenuUnderControl() 
{ 
    splitMenuStrip.Show(this, new Point(0, this.Height), ToolStripDropDownDirection.BelowRight); 
} 

Wenn Sie auch ein Symbol, wie im OP, Sie wollten eine BackgroundImage und entsprechende Polsterung verwenden könnte, wie so :

this.BackgroundImageLayout = ImageLayout.None; 
this.BackgroundImage = YourResources.ButtonIcon; 

// Add padding so the text doesn't overlay the background image 
this.Padding = new Padding(
    this.Padding.Left + this.BackgroundImage.Width, 
    this.Padding.Top, 
    this.Padding.Right, 
    this.Padding.Bottom); 

Hier ist ein Knopf von mir in Aktion:
c# winforms split button with menu and arrow and icon

Verwandte Themen