Skip to main content

DevExpress v24.2 Update — Your Feedback Matters

Our What's New in v24.2 webpage includes product-specific surveys. Your response to our survey questions will help us measure product satisfaction for features released in this major update and help us refine our plans for our next major release.

Take the survey Not interested

Showing Popup Menus

  • 5 minutes to read

Popup menus can be used in a number of ways. They can be displayed automatically as a result of end-user’s actions, or you can implement your own logic and show popup menus manually. See below to learn more.

Note

Before customizing and using a popup menu, add a BarManager or RibbonControl to the form and ensure that the popup menu is bound to this BarManager/RibbonControl. By default, a popup menu being added to the form at design time automatically looks for a BarManager/Ribbon Control within the form, and if it’s found, binds itself to the located object via the PopupMenuBase.Manager/PopupMenuBase.Ribbon property. When creating the menu at runtime, you may need to manually bind it to a BarManager/Ribbon Control via these properties.

#Automatic Display for Controls

It’s possible to associate a popup menu with a control and automatically display this menu when an end-user right-clicks the control. To assign a menu to a control, use the control’s external PopupContextMenu property. The external PopupContextMenu properties are added at design time for all controls within a form when you place a BarManager or RibbonControl component onto this form.

Add a popup menu to the form. Then, select a control and switch to the Properties window. Locate the external PopupContextMenu property and assign the popup menu to this property.

Bars3_ExternalContextMenu

The menu assigned will be displayed at runtime when right-clicking within the control’s bounds.

Note that the external PopupContextMenu property is available only at design time. To associate a menu with a control via code, you can use the BarManager.SetPopupContextMenu method. Call BarManager.GetPopupContextMenu to retrieve the control’s popup menu.

Example

Before you begin:

  • Drop the BarManager component onto the form.
  • Drop the SvgImageCollection component onto the form.
  • Add the following DevExpress SVG icons to the image collection: Copy, Paste, Add File, Folder.

The following example demonstrates how to create a popup menu and bind the menu to the Form. Right-click the form to invoke the menu (at runtime).

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraBars;
using DevExpress.XtraEditors;

namespace DevExpressPopupMenu {
    public partial class Form1 : DevExpress.XtraEditors.XtraForm {
        public Form1() {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e) {
            // Completes the BarManager's initialization (to allow its further customization on the form load)
            barManager1.ForceInitialize();
            // Creates a popup menu.
            PopupMenu menu = new PopupMenu();
            menu.Manager = barManager1;
            // Specifies a collection of vector (SVG) icons.
            barManager1.Images = svgImageCollection1;
            // Creates and initializes the items.
            BarSubItem itemAdd = new BarSubItem(barManager1, "Add");
            BarButtonItem itemAddFile = new BarButtonItem(barManager1, "File", 2);
            BarButtonItem itemAddFolder = new BarButtonItem(barManager1, "Folder", 3);
            itemAdd.AddItems(new BarItem[] { itemAddFile, itemAddFolder });
            BarButtonItem itemCopy = new BarButtonItem(barManager1, "Copy", 0);
            BarButtonItem itemPaste = new BarButtonItem(barManager1, "Paste", 1);
            // Adds the items to the popup menu.
            menu.AddItems(new BarItem[] { itemAdd, itemCopy, itemPaste });
            // Creates a separator before the Copy item.
            itemCopy.Links[0].BeginGroup = true;
            // Attaches the popup menu to the form.
            barManager1.SetPopupContextMenu(this, menu);
            // Subscribes to the 'ItemClick' event handler to process item clicks.
            barManager1.ItemClick += BarManager1_ItemClick;
        }
        void BarManager1_ItemClick(object sender, ItemClickEventArgs e) {
            XtraMessageBox.Show(string.Format("The '{0}' item was clicked.", e.Item.Caption));
        }
    }
}

The image below shows the result.

WinForms Popup Menu

#Manual Display

To activate popup menus, you normally handle specific events. For instance, if you need to open a popup menu when an end-user right-clicks within a text box, you may want to handle the control’s MouseUp event. To open a menu, call PopupMenu.ShowPopup.

#Example

The following code displays a specific PopupMenu if the right mouse button is pressed:

private void Form1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) {
    if(e.Button == MouseButtons.Right)
        popupMenu1.ShowPopup(Control.MousePosition);
}

#Automatic Display for Bar Button Items

You can associate a dropdown control (including a PopupMenu object) with regular and large bar button items (BarButtonItem or BarLargeButtonItem). In this instance, this item displays a dropdown arrow and clicking this arrow shows the associated dropdown control below the item:

Bars3_ActAsDropDown_true

To associate a popup menu with a bar button item, use the BarButtonItem.DropDownControl property. In addition, the bar item’s BarButtonItem.ButtonStyle property must be set to BarButtonStyle.DropDown.