Windows.Forms button with drop-down menu

后端 未结 9 2121
没有蜡笔的小新
没有蜡笔的小新 2020-12-02 14:31

I\'m developing simple C# application using Windows.Forms on .NET. I need some button that will show a drop-down menu with subcategories - much like ToolStripMenu, but the b

9条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-12-02 15:08

    Button have down arrow right side of it and you can set menu of it from designer:

    ss

    With ShowMenuUnderCursor:

    ss

    MenuButton class:

    public class MenuButton : Button
    {
        [DefaultValue(null)]
        public ContextMenuStrip Menu { get; set; }
    
        [DefaultValue(false)]
        public bool ShowMenuUnderCursor { get; set; }
    
        protected override void OnMouseDown(MouseEventArgs mevent)
        {
            base.OnMouseDown(mevent);
    
            if (Menu != null && mevent.Button == MouseButtons.Left)
            {
                Point menuLocation;
    
                if (ShowMenuUnderCursor)
                {
                    menuLocation = mevent.Location;
                }
                else
                {
                    menuLocation = new Point(0, Height);
                }
    
                Menu.Show(this, menuLocation);
            }
        }
    
        protected override void OnPaint(PaintEventArgs pevent)
        {
            base.OnPaint(pevent);
    
            if (Menu != null)
            {
                int arrowX = ClientRectangle.Width - 14;
                int arrowY = ClientRectangle.Height / 2 - 1;
    
                Brush brush = Enabled ? SystemBrushes.ControlText : SystemBrushes.ControlDark;
                Point[] arrows = new Point[] { new Point(arrowX, arrowY), new Point(arrowX + 7, arrowY), new Point(arrowX + 3, arrowY + 4) };
                pevent.Graphics.FillPolygon(brush, arrows);
            }
        }
    }
    

提交回复
热议问题