Search code examples
.netvb.netcontextmenuinfragistics

Infragistics context menu not closing


In my application i use Infragistics controls. Sometimes everything works perfectly, but sometimes context menu is not closing if clicked anywhere else. Example: 1) Right click on item 2) Click somewhere outside context menu 3) Context menu should close, but sometimes it stays open, until you click an item inside it.

Any ideas why this is happening?

Some code, how contextual menu is created and added to grid.

Dim contextualMenu As PopupMenuTool = New PopupMenuTool(key)
contextualMenu.DropDownArrowStyle = Infragistics.Win.UltraWinToolbars.DropDownArrowStyle.SegmentedStateButton
AddHandler contextualMenu.BeforeToolDropdown, AddressOf Me.contextualMenu_BeforeToolDropdown

Dim deleteItem As ButtonTool = New ButtonTool("delete")
deleteItem.SharedProps.AppearancesSmall.Appearance.Image = ImagesResources.Delete
deleteItem.SharedProps.Caption = Captions.Delete
AddHandler deleteItem.ToolClick, AddressOf Me.DeleteClick

Dim closeItem As ButtonTool = New ButtonTool("close")
closeItem.SharedProps.AppearancesSmall.Appearance.Image = ImagesResources.Close
closeItem.SharedProps.Caption = Captions.Close
AddHandler closeItem.ToolClick, AddressOf Me.CloseClick

Me.BaseToolbarsManager.Tools.Add(contextualMenu)
Me.BaseToolbarsManager.Tools.Add(closeItem)
Me.BaseToolbarsManager.Tools.Add(deleteItem)

contextualMenu.Tools.AddTool(deleteItem.Key)
contextualMenu.Tools.AddTool(closeItem.Key)

Me.SetcontextualMenu(Me.grid, key)

Solution

  • As per my comment above, give this function call a try after the visible and invisible call:

    Private Sub MyDoEvents()
        Dim CurrMsg         As MSG
    
        'The following loop extract all messages from the queue and dispatch them
        'to the appropriate window.
        Do While PeekMessage(CurrMsg, 0, 0, 0, PM_REMOVE) <> 0
            TranslateMessage CurrMsg
            DispatchMessage CurrMsg
        Loop
    End Sub
    

    This will make sure the code gets executed within the cell click event.