Right-Click on Appointment Item

8 posts, 0 answers
  1. Mike Baldini
    Mike Baldini avatar
    6 posts
    Member since:
    Jan 2010

    Posted 15 Feb 2010 Link to this post

    Is there a way to have the appointment items on the calendar have their own context menu? We want to allow the users to right-click to delete, copy, etc. the appointment.
  2. Boyko Markov
    Admin
    Boyko Markov avatar
    610 posts

    Posted 18 Feb 2010 Link to this post

    Hi Mike Baldini,

    Thank you for contacting us. Unfortunately, this could not be done with the current version of RadScheduler for Winforms. We will provide an API in the next version which will allow you to subscribe to the visual appointment MouseDown and MouseUp events and then you can open a custom context menu in the event handler. Please feel free to ask us any questions you may have regarding RadScheduler.

    Best wishes,
    Boyko Markov
    the Telerik team

    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items.
  3. UI for WinForms is Visual Studio 2017 Ready
  4. Mike Baldini
    Mike Baldini avatar
    11 posts
    Member since:
    Feb 2010

    Posted 19 Feb 2010 Link to this post

    Actually, I figured out a way to get it done.

    This snippet displays a custom context menu if you have an Appointment selected...

        Private Sub RadScheduler1_ContextMenuShowing(ByVal sender As ObjectByVal e As Telerik.WinControls.UI.SchedulerContextMenuShowingEventArgs) Handles RadScheduler1.ContextMenuShowing 
            Dim appt As Telerik.WinControls.UI.AppointmentElement = TryCast(Me.RadScheduler1.FocusedElement, Telerik.WinControls.UI.AppointmentElement) 
            If Not appt Is Nothing Then 
                e.ContextMenu = Me.RadContextMenu1.DropDown 
            End If 
        End Sub 

  5. Boyko Markov
    Admin
    Boyko Markov avatar
    610 posts

    Posted 25 Feb 2010 Link to this post

    Hi Mike Baldini,

    It seems that I did not understand you correctly -- I thought that you need to open a specific context menu instance when you right click on an appointment and that kind of functionality is not supported yet. However the code snippet which you have written modifies the default context menu of RadScheduler. The code will work correctly, but if you show the context menu when an appointment is focused and then show it again for a cell, only the new context menu will be opened. I have modified the code snippet which you sent us.

    Private defaultMenu As RadDropDownMenu
    Private newMenu As RadDropDownMenu
     
    Sub radScheduler_ContextMenuShowing(sender As Object, e As SchedulerContextMenuShowingEventArgs)
        If Me.defaultMenu = Nothing Then
            Me.defaultMenu = e.ContextMenu
        End If
     
        If TryCast(Me.radScheduler.FocusedElement, AppointmentElement) <> Nothing Then
            newMenu = New RadDropDownMenu()
            Dim menuItem As New RadMenuItem("AppointmentItem1")
            newMenu.Items.Add(menuItem)
            e.ContextMenu = newMenu
        Else
            e.ContextMenu = Me.defaultMenu
        End If
    End Sub

    The important thing in the source code is that you save the original menu instance and then show it again when the focused element is not an appointment element.

    If you need more information, feel free to contact us.

    Regards,
    Boyko Markov
    the Telerik team

    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items.
  6. Joel R
    Joel R avatar
    25 posts
    Member since:
    Nov 2007

    Posted 25 Feb 2010 Link to this post

    Below is how I change the menu and capture the event but how do you get a reference to the specific appointment in the event?

    Below is the code I use to to change the menu and to set the event

            void radScheduler1_ContextMenuShowing(object sender, SchedulerContextMenuShowingEventArgs e)  
            {  
                // references  
                // http://www.telerik.com/community/forums/winforms/scheduler/right-click-menu.aspx  
                // http://www.telerik.com/help/winforms/modifying_existing_context_menu.html  
     
                if (Roles.IsUserInRole(Membership.GetUser().UserName, "OpsTeam") || Roles.IsUserInRole(Membership.GetUser().UserName, "Manager"))  
                {  
                    RadMenuSeparatorItem separator = new RadMenuSeparatorItem();  
                    e.ContextMenu.Items.Add(separator);  
     
                    this.m_ApproveMenuItem = new RadMenuItem("Approve Time Off");  
                    e.ContextMenu.Items.Add(this.m_ApproveMenuItem);  
                    m_ApproveMenuItem.Click += new EventHandler(ContextMenuApprove_Click);  
     
                    this.m_DenyMenuItem = new RadMenuItem("DENY Time Off");  
                    e.ContextMenu.Items.Add(this.m_DenyMenuItem);  
                    m_DenyMenuItem.Click += new EventHandler(ContextMenuDeny_Click);  
                }  
     
                e.ContextMenu.Items[0].Text = "New Time Off";  
            }  
     
            public void ContextMenuDeny_Click(object sender, EventArgs e)  
            {  
                MessageBox.Show("Deny menu item was clicked");  
            }  
     
            public void ContextMenuApprove_Click(object sender, EventArgs e)  
            {  
                MessageBox.Show("Approve menu item was clicked");  
            }  
     
  7. Joel R
    Joel R avatar
    25 posts
    Member since:
    Nov 2007

    Posted 26 Feb 2010 Link to this post

    I solved the problem.  In my code sample I have the following

    old
    m_ApproveMenuItem.Click += new EventHandler(ContextMenuApprove_Click);  

    replacement
    m_ApproveMenuItem.Click += delegate(object s, EventArgs ev)  
    { AppointmentChangeStatus((Appointment)((AppointmentElement)e.Element).Appointment, "Parameter"); };  
     

     Now when the approveMenu item is clicked it calls the function AppointmentChangeStatus and passes in the appointment that the user right clicked on and then you can pass any additional parameters as with any normal function.
  8. Denis Cilliers
    Denis Cilliers avatar
    62 posts
    Member since:
    Jan 2004

    Posted 30 Aug 2012 Link to this post

    Having implmented this in VB.Net I get a strange result.  the first time I right click on an appointment I get  the correct menu the second time I get the basic menu?

    Help pls
    There should be some type of reset for the Dropdown Menu or have I got this wrong

    Private WithEvents ApproveMenuItem As New RadMenuItem 
       Private WithEvents DenyMenuItem As New RadMenuItem 
       Dim appt As Telerik.WinControls.UI.AppointmentElement 
       Private Sub RadScheduler1_ContextMenuShowing(ByVal sender As Object, ByVal e As Telerik.WinControls.UI.SchedulerContextMenuShowingEventArgs) Handles radSchedulerDemo.ContextMenuShowing 
           appt = TryCast(Me.radSchedulerDemo.FocusedElement, Telerik.WinControls.UI.AppointmentElement) 
           If Not appt Is Nothing Then 
               e.ContextMenu = Me.radSchedulerDemo.DropDownMenu 
               'Add New Items 
               Dim separator As New RadMenuSeparatorItem 
               e.ContextMenu.Items.Add(separator) 
               ApproveMenuItem.Text = "Check In Booking" 
               e.ContextMenu.Items.Add(ApproveMenuItem) 
               DenyMenuItem.Text = "Cancel Booking" 
               e.ContextMenu.Items.Add(DenyMenuItem) 
               e.ContextMenu.Items(0).Text = "New Booking" 
           Else 
               e.ContextMenu.Items(0).Text = "New Booking" 
           End If 
       End Sub
  9. Ivan Todorov
    Admin
    Ivan Todorov avatar
    688 posts

    Posted 03 Sep 2012 Link to this post

    Hi Denis,

    Thank you for writing.

    Adding menu items to the default context menu of RadScheduler might result in behavior like the one you are describing, since RadScheduler modifies the menu items internally. I have modified your code to work as expected. You can refer to the following code snippet:
    Private WithEvents ApproveMenuItem As New RadMenuItem
    Private WithEvents DenyMenuItem As New RadMenuItem
    Private separator As New RadMenuSeparatorItem
    Dim appt As Telerik.WinControls.UI.AppointmentElement
     
    Private Sub RadScheduler1_ContextMenuShowing(ByVal sender As Object, ByVal e As Telerik.WinControls.UI.SchedulerContextMenuShowingEventArgs) Handles RadScheduler1.ContextMenuShowing
        appt = TryCast(Me.RadScheduler1.FocusedElement, Telerik.WinControls.UI.AppointmentElement)
        If Not appt Is Nothing Then
            e.ContextMenu = Me.RadScheduler1.DropDownMenu
            'Add New Items
            ApproveMenuItem.Text = "Check In Booking"
            DenyMenuItem.Text = "Cancel Booking"
             
            If Not e.ContextMenu.Items.Contains(ApproveMenuItem) Then
                e.ContextMenu.Items.Add(separator)
                e.ContextMenu.Items.Add(ApproveMenuItem)
                e.ContextMenu.Items.Add(DenyMenuItem)
            Else
                ApproveMenuItem.Visibility = Telerik.WinControls.ElementVisibility.Visible
                DenyMenuItem.Visibility = Telerik.WinControls.ElementVisibility.Visible
                separator.Visibility = Telerik.WinControls.ElementVisibility.Visible
            End If
        End If
     
        e.ContextMenu.Items(0).Text = "New Booking"
    End Sub

    I hope you find this useful. Do not hesitate to write back if you have any further questions.

    Kind regards,
    Ivan Todorov
    the Telerik team
    RadControls for WinForms Q2'12 release is now live! Check out what's new or download a free trial >>
Back to Top
UI for WinForms is Visual Studio 2017 Ready