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

VGridControlBase.PopupMenuShowing Event

Allows you to customize built-in context menus or invoke custom menus.

Namespace: DevExpress.XtraVerticalGrid

Assembly: DevExpress.XtraVerticalGrid.v24.2.dll

NuGet Packages: DevExpress.Win.Navigation, DevExpress.Win.VerticalGrid

#Declaration

public event PopupMenuShowingEventHandler PopupMenuShowing

#Event Data

The PopupMenuShowing event's data class is PopupMenuShowingEventArgs. The following properties provide information specific to this event:

Property Description
Allow Gets or sets whether to display the context menu. Inherited from BasePopupMenuShowingEventArgs.
HitInfoType Identifies a grid element located under the popup menu.
InRecordHeader Gets whether the menu is displayed within a record header.
InRow Gets whether the menu is displayed within a row.
Menu Gets or sets the control’s popup menu that will be shown.
Point Gets or sets coordinates of the invoked context menu (top-left corner) relative to the parent control. Inherited from BasePopupMenuShowingEventArgs.
RecordIndex Gets the index of a record where the popup menu will be displayed.
RecordObject Gets a data object that corresponds to a row where the popup menu will be displayed.
Row Gets the row where the popup menu will be displayed.
ScreenPoint Gets coordinates of the invoked context menu (top-left corner) relative to the screen. Inherited from BasePopupMenuShowingEventArgs.

The event data class exposes the following methods:

Method Description
ShowCustomMenu(IDXDropDownControlEx) Invokes a custom context menu instead of the control’s menu. Inherited from BasePopupMenuShowingEventArgs.
ShowCustomMenu(ContextMenuStrip) Invokes a custom context menu instead of the control’s menu. Inherited from BasePopupMenuShowingEventArgs.

#Remarks

If the PropertyGridControl.OptionsMenu.EnableContextMenu option is enabled (see VGridOptionsMenu.EnableContextMenu), the property grid displays a context menu with a right-click on a property.

PropertyGrid_ContextMenu

The menu contains the predefined Reset command that sets the property to its default value. The PopupMenuShowing event allows you to populate the menu with custom commands or invoke a custom menu instead.

DXMenuItem createDataBindingItem;
protected DXMenuItem CreateDataBindingItem {
    get {
        if (createDataBindingItem == null) {
            DXMenuItem item = new DXMenuItem("Create Data Binding...");
            item.Click += (s, ee) => MessageBox.Show("'Create Data Binding...' is clicked.");
            createDataBindingItem = item;
        }
        return createDataBindingItem;
    }
}
private void Grid_PopupMenuShowing(object sender, Events.PopupMenuShowingEventArgs e) {
    if(e.Row.Properties.FieldName == "Appearance.BackColor")
        e.Menu.Items.Add(CreateDataBindingItem);
}

Note

Items added using this event are also shown when the menu is invoked with a click on a brick button against a property (see PGridOptionsView.ShowRowBrick).

Refer to the following help topic for more information: Context Menu.

#Example

This example shows how to add a command that toggles the Enabled property to a context menu.

using DevExpress.Utils.Menu;
using DevExpress.XtraVerticalGrid;
using DevExpress.XtraVerticalGrid.Rows;

propertyGridControl1.PopupMenuShowing += propertyGridControl1_PopupMenuShowing;
private void propertyGridControl1_PopupMenuShowing(object sender, DevExpress.XtraVerticalGrid.Events.PopupMenuShowingEventArgs e) {
    PropertyGridControl pg = sender as PropertyGridControl;
    VGridHitInfo hi = pg.CalcHitInfo(pg.PointToClient(Cursor.Position));
    if (hi.Row == null || hi.Row.Properties.FieldName != "Enabled") return;
    ToggleMenuItem.Tag = hi.Row;
    e.Menu.Items.Add(ToggleMenuItem);

}
DXMenuItem toggleMenuItem;
protected DXMenuItem ToggleMenuItem {
    get {
        if (toggleMenuItem == null) {
            DXMenuItem item = new DXMenuItem("Toggle");
            item.Click += item_Click;
            toggleMenuItem = item;
        }
        return toggleMenuItem;
    }
}
void item_Click(object sender, EventArgs e) {
    BaseRow row = (sender as DXMenuItem).Tag as BaseRow;
    bool cellValue = (bool)row.Grid.GetCellValue(row, 0);
    row.Grid.SetCellValue(row, 0, !cellValue);
}
See Also