Подтвердить что ты не робот

Кнопка разделения в .NET Winforms

Я ищу кнопку разделения в .NET WinForms. Вид, где одна сторона - кнопка, а другая сторона - кнопка выпадающего списка.

Я вижу, что они используются повсюду в окнах, например, в окне Visual Studio Save As, поэтому я решил, что у них должен быть элемент управления в некоторой библиотеке.

Я знаю, что там для инструментальных панелей, но мне нужен тот, который можно использовать вне инструментальных панелей.

Есть ли библиотека Microsoft, которая имеет одну или, желательно, бесплатную библиотеку? Я использую .NET 3.5

Пример: Example Button

4b9b3361

Ответ 1

Вы можете сделать простую версию самостоятельно, используя изображение кнопки. У меня есть свой собственный класс, который получен из 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);

Вот моя кнопка в действии:
c# winforms split button with menu and arrow and icon