Adding items to default contect menu

13 posts, 0 answers
  1. Finn
    Finn avatar
    27 posts
    Member since:
    Jun 2008

    Posted 28 Jul 2008 Link to this post

    I saw an example on how to replace the default RadGridView context (right-click) menu with a "user"-defined context menu. But how do I add items to the default menu.

    VB .NET code only, please.

    Finn
  2. Jordan
    Admin
    Jordan avatar
    547 posts

    Posted 31 Jul 2008 Link to this post

    Hi Finn,

    You can easily add items to the context menu by handling the ContextMenuOpening event of RadGridView like:
    Private menuItem As RadMenuItem = Nothing 
     
            Private Sub radGridView1_ContextMenuOpening(ByVal sender As ObjectByVal e As ContextMenuOpeningEventArgs) 
                If Me.menuItem Is Nothing Then 
                    Me.menuItem = New RadMenuItem("Custom Menu Item"
                    AddHandler menuItem.Click, AddressOf menuItem_Click 
                End If 
     
                e.ContextMenu.Items.Add(Me.menuItem) 
            End Sub 
     
            Private Sub menuItem_Click(ByVal sender As ObjectByVal e As EventArgs) 
                MessageBox.Show("Custom Menu Item Clicked!"
            End Sub 

    Don't hesitate to contact us if you have other questions.

    All the best,
    Jordan
    the Telerik team

    Check out Telerik Trainer, the state of the art learning tool for Telerik products.
  3. UI for WinForms is Visual Studio 2017 Ready
  4. Finn
    Finn avatar
    27 posts
    Member since:
    Jun 2008

    Posted 31 Jul 2008 Link to this post

    Thank you Jordan.

    That was easy (once one knows which even to use).

    I take it that to add main menu items to the context menu I'll have to replace my existing Windows MainMenu1with the RadMenu?

    Finn
  5. Finn
    Finn avatar
    27 posts
    Member since:
    Jun 2008

    Posted 31 Jul 2008 Link to this post

    OK, I managed to mess it up.
    I replaced my (Windows) MainMenu1with a RadMenu (a lot of work!).

    Then, in the "Private Sub radGridView1_ContextMenuOpening(" procedure I added this code:
    e.ContextMenu.Items(0).Visibility = Telerik.WinControls.ElementVisibility.Hidden
    e.ContextMenu.Items(1).Visibility = Telerik.WinControls.ElementVisibility.Hidden
    e.ContextMenu.Items.Add(RadMenuSeparatorItem1)
    e.ContextMenu.Items.Add(mnuOpenMsDebugTxt)
    e.ContextMenu.Items.Add(mnuExportToExcel)
    e.ContextMenu.Items.Add(RadMenuSeparatorItem2)
    e.ContextMenu.Items.Add(mnuRefresh)

    But when doing that, these menu items disappears from the main menu!

    Surely there must be a way of sharing the RadMenuItems between the main RadMenu and several content menus?

    But how?

    Also, as you can see, I want to get rid of the default "Copy" item.
    But what I really want is to move the mnuRefresh up as the first item. How do I do that?

    Lastly, how does one add a separator (without using one from another menu)?

    Finn

    P.S. Is there an easy way to easily convert Windows menu items to RadMenuItems? I still have several sub menus to move over from the old MainMenu1 to the RadMainMenu.

  6. Jordan
    Admin
    Jordan avatar
    547 posts

    Posted 01 Aug 2008 Link to this post

    Hello Finn,

    Glad to hear that I helped.
    Now, regarding your other questions:
    Yes, you should not use the windows forms context menu.
    Menu items cannot be shared between several menus.
    You can easily put a menu item at the beginning using the Insert method and add a separator item (see code sample below):
    void radGridView1_ContextMenuOpening(object sender, ContextMenuOpeningEventArgs e) 
            { 
                //Insert item at the beginning of the context menu 
                e.ContextMenu.Items.Insert(0, new RadMenuItem("First Item")); 
     
                //Add a separator and another menu item at the bottom 
                e.ContextMenu.Items.Add(new RadMenuSeparatorItem()); 
                e.ContextMenu.Items.Add(new RadMenuItem("Menu Item")); 
            } 

    Unfortunately you will have to manually convert your windows forms menu items to RadMenuItems.

    Greetings,
    Jordan
    the Telerik team

    Check out Telerik Trainer, the state of the art learning tool for Telerik products.
  7. Finn
    Finn avatar
    27 posts
    Member since:
    Jun 2008

    Posted 01 Aug 2008 Link to this post

    Thanks for the .Insert and Separator answers!

    Also, I found the way to remove a default item:
    e.ContextMenu.Items.Remove(e.ContextMenu.Items(0))

    It is really disappointing that RadMenuItems can't be shared. Not very logical as they are used both in RadMenu and Context menu.

    Finn
  8. Jordan
    Admin
    Jordan avatar
    547 posts

    Posted 04 Aug 2008 Link to this post

    Hello Finn,

    Glad to hear that I could help.

    Regarding the sharing of RadMenuItems - they are in fact visual items and visual items cannot be shared in multiple visual element trees.
    However we will consider providing some kind of menu item sharing in a future release, although I cannot promise anything at the moment.

    Regards,
    Jordan
    the Telerik team

    Check out Telerik Trainer, the state of the art learning tool for Telerik products.
  9. Kevin Meyer
    Kevin Meyer avatar
    36 posts
    Member since:
    Dec 2007

    Posted 03 Dec 2008 Link to this post

    It looks like with Q3 2008, e.ContextMenu is null.  I see there is a property e.ContextMenuProvider.  What's the recommended way to construct a new ContextMenu to assign to the event args?

    -- Update --
    It looks like the ContextMenu is only null if the grid master template is set not to allow cell context menus.
  10. Jordan
    Admin
    Jordan avatar
    547 posts

    Posted 04 Dec 2008 Link to this post

    Hi Kevin Meyer,

    Indeed, you should get the context menu if it is allowed, and there is one available in the ContextMenu property.
    You can change the items in it or even set it to null. If after the event there are no items, or you have set the context menu to null, it should not show.

    The ContextMenuProvider property contains a reference to the item that provided the context menu (as the name implies).

    Do not hesitate to write again if you have more questions or suggestions.

    Greetings,
    Jordan
    the Telerik team

    Check out Telerik Trainer, the state of the art learning tool for Telerik products.
  11. MikeB
    MikeB avatar
    42 posts
    Member since:
    May 2008

    Posted 20 Feb 2009 Link to this post

    Hi,
    Is there a way to add menu items to the grid context menu without using the ContextMenuOpening Event Handler?
    This is what I am currently doing (and works):

    private RadMenuItem _mnuItemPrintRcpt = new RadMenuItem("Print Receipt");
    private RadMenuSeparatorItem _mnuSeperator = new RadMenuSeparatorItem();



    _mnuItemPrintRcpt.Click += new EventHandler(_mnuItemPrintRcpt_Click);
            private void grdCCTHistory_ContextMenuOpening(object sender, ContextMenuOpeningEventArgs e)
            {
                e.ContextMenu.Items.Insert(0, _mnuSeperator);
                e.ContextMenu.Items.Insert(0, _mnuItemPrintRcpt);
            }

    As, I mentioned, this is working fine.  I'm just wondering if it can be done without using the ContextMenuOpening Handler?

    Thanks,
    MikeB





  12. Jordan
    Admin
    Jordan avatar
    547 posts

    Posted 23 Feb 2009 Link to this post

    Hi MikeB,

    You can have a context menu for the RadGridView without modifying the one from the ContextMenuOpening event arguments. You can do that by following the steps:

    1. drag on your form a RadContextMenu component (this is the actual context menu)
    2. drag on your form a RadContextMenuManager component (this will add a RadContextMenu property to the grid view)
    3. set the RadContextMenu component to the grid RadContextMenu property
    4. in the ContextMenuOpening event handler always set cancel to true.

    Do not hesitate to write me back if you need further assistance.

    All the best,
    Jordan
    the Telerik team

    Instantly find answers to your questions on the new Telerik Support Portal.
    Check out the tips for optimizing your support resource searches.
  13. MikeB
    MikeB avatar
    42 posts
    Member since:
    May 2008

    Posted 22 Jul 2009 Link to this post

    Hi,

    I think that I didn't give you enough information on my last post.  I want to have the default grid context menu items available and add some additional items.  The response to the last post worked to replace the default context menu with my own but that is not what I want to do.  So I just went with the example that shows how to add items to the default context menu.

    The reason that I am posting this now is that something seems to have changed.  We are now using version 2009_2_7001.  The first time that I right click on the grid, the context menu appears correctly (with the additional items added to the default items).  After that the context menu appears with out the added items (but has empty space where it would display).  So the added items are no longer available until the form is closed and re-opened.

    What I was trying to ask in my previous post was "why would we want to add the (same) items every time that the context menu was opened?"  But it worked so I moved on.  Now it is not working and I'm wondering if this is no longer the correct method to add items to the default grid context menu.

    Thanks for your help.
    Mike
  14. Nikolay
    Admin
    Nikolay avatar
    1803 posts

    Posted 23 Jul 2009 Link to this post

    Hi MikeB,

    You can find the answer to your question in the support ticket that you opened. I am posting the answer here as well for those who are interested in the topic.

    Indeed, we made changes in the context menu. In our previous versions there was a memory leak issue in the context menu which we addressed. In the current version the context menu is disposed correctly, but the items that you add to it are disposed as well. You create your menu items only once, and when you open and close the context menu, these items are disposed. So, the next time you open a context menu, you try to insert a disposed object which leads to the wrong display.

    Therefore, you need to create new instances of your menu items in the ContextMenuOpening event handler:

    private RadMenuItem _mnuItemPrintRcpt;     
    private RadMenuSeparatorItem _mnuSeperator;     
        
    void radGridView1_ContextMenuOpening(object sender, Telerik.WinControls.UI.ContextMenuOpeningEventArgs e)     
    {     
        _mnuItemPrintRcpt = new RadMenuItem("Print Receipt");     
        _mnuSeperator = new RadMenuSeparatorItem();     
        e.ContextMenu.Items.Insert(0, _mnuSeperator);     
        e.ContextMenu.Items.Insert(0, _mnuItemPrintRcpt);     
    }   

    All the best,

    Nikolay
    the Telerik team

    Instantly find answers to your questions on the new Telerik Support Portal.
    Check out the tips for optimizing your support resource searches.
Back to Top
UI for WinForms is Visual Studio 2017 Ready