windowsforms-10780-common-features-menus.md
Many DevExpress controls have built-in context-dependent popup menus. You can customize them or replace with custom menus in code. The built-in context menus are encapsulated by DXPopupMenu class objects.
The PopupMenu component allows you to create a non-context-dependent popup menu for a control. Unlike the DXPopupMenu, the PopupMenu component provides design-time customization tools.
The current document covers information on how to customize built-in context-dependent popup menus for the DevExpress controls.
Specific DevExpress .NET controls contain properties to enable/disable predefined items in their built-in context menus. Below is a list of these controls and corresponding properties:
The following code enables the “Show Footer” menu item via the GridView.OptionsMenu.ShowFooterItem property.
gridView1.OptionsMenu.ShowFooterItem = true;
GridView1.OptionsMenu.ShowFooterItem = True
DevExpress .NET controls provide events to perform advanced menu customization tasks:
|
Control
|
Menu Customization Events
| | --- | --- | |
See Popup Menus.
|
GridView.PopupMenuShowing and GridView.GridMenuItemClick
| |
See Context Menus.
|
TreeList.PopupMenuShowing and TreeList.TreeListMenuItemClick
| |
|
PivotGridControl.PopupMenuShowing and PivotGridControl.MenuItemClick
| |
See Context Menu.
|
LayoutControl.PopupMenuShowing
| |
VGridControl, PropertyGridControl
|
VGridControlBase.PopupMenuShowing
| |
|
| |
|
| |
|
| |
|
SchedulerControl.PopupMenuShowing
| |
|
RichEditControl.PopupMenuShowing
| |
|
FilterControl.PopupMenuShowing
| |
|
| |
Text Editors (TextEdit descendants)
|
editor.Properties.BeforeShowMenu
|
When you handle any of these events, you can access the currently processed menu from the e.Menu event argument. The e.Menu.Items property returns a collection of menu items, encapsulated by the following objects:
The following code sample invokes a custom context menu when a user right-clicks a column header:
Add a BarManager to the form and create a custom PopupMenu.
Handle the GridView.PopupMenuShowing event and call the e.ShowCustomMenu method to display your custom menu instead of the default header menu.
void gridView1_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e) {
if (e.MenuType == GridMenuType.Column) {
popupMenu_Column.Tag = e.HitInfo;
popupMenu_Column.MenuCaption = $"{e.HitInfo.Column}";
e.ShowCustomMenu(popupMenu_Column);
}
}
GridHitInfo GetHitInfo(BarItemLink link) {
PopupMenu menu = link.LinkedObject as PopupMenu;
return menu.Tag as GridHitInfo;
}
void barButtonItem_Filter_ItemClick(object sender, ItemClickEventArgs e) {
GridHitInfo info = GetHitInfo(e.Link);
info.View.ShowFilterEditor(info.Column);
}
void barButtonItem_ColumnChooser_ItemClick(object sender, ItemClickEventArgs e) {
GridHitInfo info = GetHitInfo(e.Link);
info.View.ShowCustomization();
}
Private Sub gridView1_PopupMenuShowing(ByVal sender As Object, ByVal e As PopupMenuShowingEventArgs)
If e.MenuType = GridMenuType.Column Then
popupMenu_Column.Tag = e.HitInfo
popupMenu_Column.MenuCaption = $"{e.HitInfo.Column}"
e.ShowCustomMenu(popupMenu_Column)
End If
End Sub
Private Function GetHitInfo(ByVal link As BarItemLink) As GridHitInfo
Dim menu As PopupMenu = TryCast(link.LinkedObject, PopupMenu)
Return TryCast(menu.Tag, GridHitInfo)
End Function
Private Sub barButtonItem_Filter_ItemClick(ByVal sender As Object, ByVal e As ItemClickEventArgs)
Dim info As GridHitInfo = GetHitInfo(e.Link)
info.View.ShowFilterEditor(info.Column)
End Sub
Private Sub barButtonItem_ColumnChooser_ItemClick(ByVal sender As Object, ByVal e As ItemClickEventArgs)
Dim info As GridHitInfo = GetHitInfo(e.Link)
info.View.ShowCustomization()
End Sub
The following code sample creates a menu item that fixes the column to the left. This item is added to the column header’s context menu next to the Hide This Column item:
void gridView1_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e) {
if (e.MenuType == GridMenuType.Column) {
DXMenuItem item = new DXMenuItem("Fix/Unfix This Column", (s, args) => {
GridColumn column = (s as DXMenuItem).Tag as GridColumn;
if (column.Fixed == FixedStyle.Left)
column.Fixed = FixedStyle.None;
else column.Fixed = FixedStyle.Left;
});
item.Tag = e.HitInfo.Column;
int index = e.Menu.Items.IndexOf(e.Menu.Find(GridStringId.MenuColumnRemoveColumn));
e.Menu.Items.Insert(index + 1, item);
}
}
Private Sub gridView1_PopupMenuShowing(ByVal sender As Object, ByVal e As PopupMenuShowingEventArgs)
If e.MenuType = GridMenuType.Column Then
Dim item As DXMenuItem = New DXMenuItem("Fix/Unfix This Column", Function(s, args)
Dim column As GridColumn = TryCast((TryCast(s, DXMenuItem)).Tag, GridColumn)
If column.Fixed = FixedStyle.Left Then
column.Fixed = FixedStyle.None
Else
column.Fixed = FixedStyle.Left
End If
End Function)
item.Tag = e.HitInfo.Column
Dim index As Integer = e.Menu.Items.IndexOf(e.Menu.Find(GridStringId.MenuColumnRemoveColumn))
e.Menu.Items.Insert(index + 1, item)
End If
End Sub
A DXPopupMenu object can be displayed as a regular menu, popup bar or RibbonMiniToolbar. To specify the menu’s display mode, set the DXPopupMenu.MenuViewType property to the required enumeration value and use a corresponding menu manager.
When you invoke a DXPopupMenu manually in code, you can specify a menu manager via the popup menu’s IDXDropDownControl.Show method. For built-in menus in DevExpress controls, you can specify a menu manager via a control’s MenuManager property.
The following menu managers are available.
SkinMenuManager - Displays a DXPopupMenu as a regular menu.
BarManager - Displays DXPopupMenu as a popup bar.
RibbonControl - Displays a DXPopupMenu as a RibbonMiniToolbar object.
DevExpress WinForms UI controls (Data Grid, Tree List, Vertical Grid, Gantt Control, etc.) ship with the built-in context menus. Read the following quick-reference guide for detailed information and examples:
Context Menus - DevExpress WinForms Cheat Sheets
See Also