Skip to main content

VGridControlBase.PopupMenuShowing Event

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

Namespace: DevExpress.XtraVerticalGrid

Assembly: DevExpress.XtraVerticalGrid.v24.1.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