Back to Devexpress

SchedulerControl.PopupMenuShowing Event

windowsforms-devexpress-dot-xtrascheduler-dot-schedulercontrol-2f9f7463.md

latest9.6 KB
Original Source

SchedulerControl.PopupMenuShowing Event

Occurs before a popup menu is displayed for a SchedulerControl. Allows you to customize the built-in menu or display a custom menu.

Namespace : DevExpress.XtraScheduler

Assembly : DevExpress.XtraScheduler.v25.2.dll

NuGet Package : DevExpress.Win.Scheduler

Declaration

csharp
public event PopupMenuShowingEventHandler PopupMenuShowing
vb
Public Event PopupMenuShowing As PopupMenuShowingEventHandler

Event Data

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

PropertyDescription
AllowGets or sets whether to enable the popup menu.
HitInfoGets an object that identifies the menu UI element that the user clicked on.
MenuGets or sets the popup (context) menu for which this event was raised.
MenuTypeGets the type of the popup menu.
PointGets the position to invoke the popup menu.

Remarks

Handle the PopupMenuShowing event to do the following:

  • Customize the built-in popup menu (add, remove, and modify menu items).
  • Display a custom popup menu.

Use the e.Menu event parameter to access the built-in popup menu.

The e.MenuType property specifies the type of the popup menu.

Set the e.Allow event parameter to false to prevent the built-in menu from appearing.

Example: Customize the Popup Menu

This example handles the PopupMenuShowing event to customize the Scheduler’s popup menu (add, modify, and remove existing items):

View Example: Customize the Popup Menu

csharp
using DevExpress.Utils.Menu;
using DevExpress.XtraScheduler;
using DevExpress.XtraScheduler.Services;
using DevExpress.XtraScheduler.Commands;
// ...
void schedulerControl1_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e) {
    if (e.MenuType == DevExpress.XtraScheduler.Views.SchedulerMenuType.DefaultMenu) {
        // Hide the "Change View To" menu item
        SchedulerPopupMenu itemChangeViewTo = e.Menu.GetPopupMenuById(SchedulerMenuItemId.SwitchViewMenu);
        itemChangeViewTo.Visible = false;

        // Remove unnecessary items
        e.Menu.RemoveMenuItem(SchedulerMenuItemId.NewAllDayEvent);

        // Disable the "New Recurring Appointment" menu item
        e.Menu.DisableMenuItem(SchedulerMenuItemId.NewRecurringAppointment);

        // Rename the "New Appointment" menu item
        SchedulerMenuItem item = e.Menu.GetMenuItemById(SchedulerMenuItemId.NewAppointment);
        if (item != null) {
            item.Caption = "&New Meeting";
            item.ImageOptions.SvgImage = DevExpress.Utils.Svg.SvgImage.FromFile("NewItem.svg");
        }

        // Display a new menu item for a SchedulerCommand
        ISchedulerCommandFactoryService service = schedulerControl1.GetService<ISchedulerCommandFactoryService>();
        SchedulerCommand cmd = service.CreateCommand(SchedulerCommandId.SwitchToGroupByResource);
        SchedulerMenuItemCommandWinAdapter menuItemCommandAdapter =
            new SchedulerMenuItemCommandWinAdapter(cmd);
        DXMenuItem menuItem = (DXMenuItem)menuItemCommandAdapter.CreateMenuItem(DXMenuItemPriority.Normal);
        menuItem.BeginGroup = true;
        e.Menu.Items.Add(menuItem);

        // Display a new menu item and handle its Click event
        e.Menu.Items.Add(new SchedulerMenuItem("Click me!", MyClickHandler));
    }
}

public void MyClickHandler(object sender, EventArgs e) {
    MessageBox.Show("My menu item was clicked!");
}
vb
Imports DevExpress.Utils.Menu
Imports DevExpress.XtraScheduler
Imports DevExpress.XtraScheduler.Services
Imports DevExpress.XtraScheduler.Commands
' ...
Private Sub schedulerControl1_PopupMenuShowing(ByVal sender As Object, ByVal e As PopupMenuShowingEventArgs) Handles schedulerControl1.PopupMenuShowing
    If e.MenuType = DevExpress.XtraScheduler.Views.SchedulerMenuType.DefaultMenu Then
        Dim itemChangeViewTo As SchedulerPopupMenu = e.Menu.GetPopupMenuById(SchedulerMenuItemId.SwitchViewMenu)
        itemChangeViewTo.Visible = False

        e.Menu.RemoveMenuItem(SchedulerMenuItemId.NewAllDayEvent)
        e.Menu.DisableMenuItem(SchedulerMenuItemId.NewRecurringAppointment)

        Dim item As SchedulerMenuItem = e.Menu.GetMenuItemById(SchedulerMenuItemId.NewAppointment)
                If item IsNot Nothing Then
                    item.Caption = "&New Meeting"
                    item.ImageOptions.SvgImage = DevExpress.Utils.Svg.SvgImage.FromFile("NewItem.svg")
                End If

        Dim service As ISchedulerCommandFactoryService = schedulerControl1.GetService(Of ISchedulerCommandFactoryService)()
        Dim cmd As SchedulerCommand = service.CreateCommand(SchedulerCommandId.SwitchToGroupByResource)
        Dim menuItemCommandAdapter As New SchedulerMenuItemCommandWinAdapter(cmd)
        Dim menuItem As DXMenuItem = CType(menuItemCommandAdapter.CreateMenuItem(DXMenuItemPriority.Normal), DXMenuItem)
        menuItem.BeginGroup = True
        e.Menu.Items.Add(menuItem)

        e.Menu.Items.Add(New SchedulerMenuItem("Click me!", AddressOf MyClickHandler))
    End If
End Sub

Public Sub MyClickHandler(ByVal sender As Object, ByVal e As EventArgs)
    MessageBox.Show("My Menu Item Was Clicked!")
End Sub

Example: Display a Custom Menu

The following example handles the PopupMenuShowing event to display a custom popup menu when the user right-clicks an appointment. The example sets the e.Allow event parameter to false to prevent the built-in menu from appearing.

Note

In this example, a custom popup menu is created and customized at design time.

csharp
void SchedulerControl_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e) {
    if(e.MenuType == DevExpress.XtraScheduler.Views.SchedulerMenuType.AppointmentMenu) {
        e.Allow = false;
        customPopupMenu.ShowPopup(Cursor.Position);
    }
}
vb
Private Sub SchedulerControl_PopupMenuShowing(ByVal sender As Object, ByVal e As PopupMenuShowingEventArgs)
    If e.MenuType = DevExpress.XtraScheduler.Views.SchedulerMenuType.AppointmentMenu Then
        e.Allow = False
        customPopupMenu.ShowPopup(Cursor.Position)
    End If
End Sub

Example: Manage Resources at Runtime

This example manages Scheduler resources in code (creates, modifies, deletes the selected resource).

The PopupMenuShowing event is handled to add custom commands:

csharp
private void schedulerControl1_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e) {
    if (e.Menu.Id == DevExpress.XtraScheduler.SchedulerMenuItemId.DefaultMenu) {
        SchedulerMenuItem itemNewResource = new SchedulerMenuItem("New Resource", OnAddResource);
        SchedulerMenuItem itemEditResource = new SchedulerMenuItem("Edit Resource", OnEditResource);
        SchedulerMenuItem itemDeleteResource = new SchedulerMenuItem("Delete Resource", OnDeleteResource);
        int baseIndex = 4;
        itemNewResource.BeginGroup = true;
        e.Menu.Items.Insert(baseIndex, itemNewResource);
        e.Menu.Items.Insert(baseIndex + 1, itemEditResource);
        e.Menu.Items.Insert(baseIndex + 2, itemDeleteResource);
    }
}
vb
Private Sub schedulerControl1_PopupMenuShowing(sender As Object, e As PopupMenuShowingEventArgs) Handles schedulerControl1.PopupMenuShowing
    If e.Menu.Id = DevExpress.XtraScheduler.SchedulerMenuItemId.DefaultMenu Then
        Dim itemNewResource As New SchedulerMenuItem("New Resource", AddressOf OnAddResource)
        Dim itemEditResource As New SchedulerMenuItem("Edit Resource", AddressOf OnEditResource)
        Dim itemDeleteResource As New SchedulerMenuItem("Delete Resource", AddressOf OnDeleteResource)

        Dim baseIndex As Integer = 4
        itemNewResource.BeginGroup = True

        e.Menu.Items.Insert(baseIndex, itemNewResource)
        e.Menu.Items.Insert(baseIndex + 1, itemEditResource)
        e.Menu.Items.Insert(baseIndex + 2, itemDeleteResource)
    End If
End Sub

View Example

See Also

SchedulerControl Class

SchedulerControl Members

DevExpress.XtraScheduler Namespace