如何在Winforms中分割按钮[closed]?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (9)

我正在寻找.NET WinForms中的分割按钮。一边是按钮而另一边有下拉按钮的那种。

我发现他们在windows中使用过,比如在Visual Studio的另存为窗口中,所以我想他们必须在某个库中有控制权。

我知道有一个工具条,但我需要一个可用于工具条之外的工具条。

是否有微软的图书馆有一个或最好是免费的库?我使用.NET 3.5

举个例子:

提问于
用户回答回答于

你可以自己做一个简单的版本,使用按钮的图像。我有我自己的类来源于Button

我设置了这样的图像(这是一个向下箭头):

{
    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);
}

如果你还想要一个图标,就像在OP中一样,你可以使用一个BackgroundImage适当的填充,如下所示:

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);

下面是我的一个按钮:

扫码关注云+社区