single click calls ContextMenuItem event multiple times

5 posts, 0 answers
  1. Gone2TheDogs
    Gone2TheDogs avatar
    59 posts
    Member since:
    May 2016

    Posted 07 Dec 2018 Link to this post

    I wrote some code to capture the user's selected values before changing them. Thus, allowing the changes to be restored to the previous values. 

    The problem I ran into was that my click event from the contextmenu is called multiple times. This wipes out the true previous values. I could just add a flag at the beginning of the event, but I was wondering if there was a better way to approach this? why is this click event called multiple times on a single click?

     

    01.Private Sub FF_MenuItem_Click(sender As Object, e As EventArgs) Handles FF_MenuItem.Click
    02.'Populate selected cells with "FF"
    03.Try
    04.Dim cell As GridViewCellInfo
    05. 
    06.If dgvMain.SelectedCells.Count > 0 Then
    07._lastGridChange.Clear
    08.End If
    09. 
    10.For Each cell In dgvMain.SelectedCells
    11._lastGridChange.Add(cell.RowInfo.Index & "," & cell.ColumnInfo.Index & "," & cell.Value)
    12.cell.Value = "FF"
    13.Next
    14.Catch ex As Exception
    15.ShowErrorBox("No cell selection detected. Be sure to select a cell first.")
    16.End Try
    17.End Sub

    Line 11.  _lastGridChange saves the values before they are updated

     

     

     

    01.Private Sub dgvMain_ContextMenuOpening(sender As Object, e As ContextMenuOpeningEventArgs) Handles dgvMain.ContextMenuOpening
    02. 
    03.    FF_MenuItem.Text = "FF"
    04.    HH_MenuItem.Text = "HH"
    05.    CC_MenuItem.Text = "CC"
    06.    ClearColumn_MenuItem.Text = "Clear Column Values"
    07. 
    08.    Dim separator As RadMenuSeparatorItem = New RadMenuSeparatorItem()
    09.    e.ContextMenu.Items.Add(separator)
    10. 
    11.    Try
    12.        e.ContextMenu.Items.Add(FF_MenuItem)
    13.        e.ContextMenu.Items.Add(HH_MenuItem)
    14.        e.ContextMenu.Items.Add(CC_MenuItem)
    15.        e.ContextMenu.Items.Add(ClearColumn_MenuItem)
    16.    Catch ex As Exception
    17.    End Try
    18. 
    19.    Try
    20.        AddHandler FF_MenuItem.Click, AddressOf FF_MenuItem_Click
    21.        AddHandler HH_MenuItem.Click, AddressOf HH_MenuItem_Click
    22.        AddHandler CC_MenuItem.Click, AddressOf CC_MenuItem_Click
    23.        AddHandler ClearColumn_MenuItem.Click, AddressOf ClearColumn_MenuItem_Click
    24.    Catch ex As Exception
    25.    End Try
    26.End Sub

    Setting up the ContextMenu Options

     

     

     

     

     

  2. Gone2TheDogs
    Gone2TheDogs avatar
    59 posts
    Member since:
    May 2016

    Posted 07 Dec 2018 Link to this post

    From original post:  "...I could just add a flag at the beginning of the event,..."

    > Actually, I'm stumped. Flag won't work here. I can't find a way to make this work. Any suggestions would be appreciated.

  3. Gone2TheDogs
    Gone2TheDogs avatar
    59 posts
    Member since:
    May 2016

    Posted 07 Dec 2018 in reply to Gone2TheDogs Link to this post

    I found a way to get the flag to work. I was looking for a way to clear the flag at the appropriate time. The grid_click event did the job. 

    I'm still curious why there a multiple calls to the MenuItem click event on a single click. 

    Also, was wondering if there was a better way to undo the last change other than the way I came up with.

     

     

  4. Dess | Tech Support Engineer, Sr.
    Admin
    Dess | Tech Support Engineer, Sr.  avatar
    3330 posts

    Posted 10 Dec 2018 Link to this post

    Hello, Bob,    

    According to the provided code snippet, it seems that you initialize the RadMenuItems outside the ContextMenuOpening event. However, you subscribe to the Click event of each item every time the ContextMenuOpening event is fired. In order to avoid multiple firing of the event, please ensure that you first unsubscribe from this event:

    Dim FF_MenuItem As New RadMenuItem
    Dim HH_MenuItem As New RadMenuItem
    Dim CC_MenuItem As New RadMenuItem
    Dim ClearColumn_MenuItem As New RadMenuItem
    Private Sub dgvMain_ContextMenuOpening(sender As Object, e As ContextMenuOpeningEventArgs) Handles RadGridView1.ContextMenuOpening
     
        FF_MenuItem.Text = "FF"
        HH_MenuItem.Text = "HH"
        CC_MenuItem.Text = "CC"
        ClearColumn_MenuItem.Text = "Clear Column Values"
     
        Dim separator As RadMenuSeparatorItem = New RadMenuSeparatorItem()
        e.ContextMenu.Items.Add(separator)
     
        Try
            e.ContextMenu.Items.Add(FF_MenuItem)
            e.ContextMenu.Items.Add(HH_MenuItem)
            e.ContextMenu.Items.Add(CC_MenuItem)
            e.ContextMenu.Items.Add(ClearColumn_MenuItem)
        Catch ex As Exception
        End Try
     
        Try
            RemoveHandler FF_MenuItem.Click, AddressOf FF_MenuItem_Click
            RemoveHandler HH_MenuItem.Click, AddressOf HH_MenuItem_Click
            RemoveHandler CC_MenuItem.Click, AddressOf CC_MenuItem_Click
            RemoveHandler ClearColumn_MenuItem.Click, AddressOf ClearColumn_MenuItem_Click
     
            AddHandler FF_MenuItem.Click, AddressOf FF_MenuItem_Click
            AddHandler HH_MenuItem.Click, AddressOf HH_MenuItem_Click
            AddHandler CC_MenuItem.Click, AddressOf CC_MenuItem_Click
            AddHandler ClearColumn_MenuItem.Click, AddressOf ClearColumn_MenuItem_Click
        Catch ex As Exception
        End Try
    End Sub

    I hope this information helps. If you need any further assistance please don't hesitate to contact me. 

    Regards,
    Dess | Tech Support Engineer, Sr.
    Progress Telerik
    Get quickly onboarded and successful with your Telerik and/or Kendo UI products with the Virtual Classroom free technical training, available to all active customers. Learn More.
  5. Gone2TheDogs
    Gone2TheDogs avatar
    59 posts
    Member since:
    May 2016

    Posted 10 Dec 2018 Link to this post

    I defined the menuItems in the ContextMenuOpening. That corrected it. Thank you for replying.
Back to Top