在不单击当前单元格的情况下显示 ContextMenuStripItem

Show ContextMenuStripItem without clicking off the current cell

我使用的 UltraGrid 有一个 ContextMenuStrip 和 2 个项目。右键单击 UltraGridCell.

时会显示这些内容

但是,为了显示它们,用户必须先单击单元格以使其退出编辑模式,然后右键单击它以显示 ContextMenuStripItems

这已经让用户感到困惑和恼火,所以我想知道是否有任何方法可以更改为在编辑模式下右键单击时显示它们?

我试过在按下某个键后将其退出编辑模式,但它不起作用。

Private Sub ugComm_keyup(sender As Object, e As KeyEventArgs) Handles ugComm.KeyUp

  ugComm.UpdateData()
  If ugComm.ActiveCell.IsInEditMode = True Then
      ugComm.ActiveCell.Row.Update()
  End If

End Sub

我也尝试了 Infragistics 论坛上建议的 MouseClick 中的一些方法,但还是没有用。

有什么方法可以让用户右键单击处于编辑模式的单元格可以调出 ContextMenuStripItems 而不是这个菜单?

上图显示了在编辑模式下右键单击单元格时当前显示的内容(该单元格是右下角的白色单元格)。我不想让这个出现,而是让 CMS 出现。

编辑

我已经尝试了当前答案中的建议,但这些都不适合我。可能是因为网格版本稍旧?

我最近的工作是使用以下代码完成的:

Private Sub ugComm_MouseDown(sender As Object, e As MouseEventArgs) Handles ugComm.MouseDown

    If e.Button = Windows.Forms.MouseButtons.Right Then
        Me.cmCommRate.Show(mouseX, mouseY)
    End If
End Sub

但是直到单元格不再处于编辑模式时才触发。

以下两个答案均无法解决问题。仍然需要一个答案

我已尝试使用此代码为 MouseUp 事件编写事件处理程序

Private Sub grid_MouseUp(sender As Object, e as MouseEventArgs) Handles grid.KeyUp
    grid.PerformAction(UltraGridAction.ExitEditMode)
    grid.ContextMenuStrip.Show()
End Sub

并且有效。

已将 ContextMenuStrip 添加到带有此文本的代码中(作为示例)

ContextMenuStrip ctx = new ContextMenuStrip()
ctx.Items.Add("Test1")
ctx.Items.Add("Test2")
ctx.Items.Add("Test3")
grid.ContextMenuStrip = ctx

当网格的任何单元格进入编辑模式时,会在该单元格上绘制一个文本框。这里最好的部分是这个文本框被网格中的所有单元格重复使用。当您在编辑模式下右键单击单元格时,会显示来自 MS 的默认上下文菜单。您需要做的是获取此文本框并将其分配给您的上下文菜单条。您可以像这样处理网格的 ControlAdded 事件来做到这一点:

    ' create a field to store the TextBox    
    Private cellTextBox As TextBox

    Private Sub grid_ControlAdded(sender As Object, e As ControlEventArgs) Handles grid.ControlAdded
        ' Check if added control is TextBox 
        If TypeOf e.Control Is TextBox Then
            ' If added control is TextBox store it in your private field and set its ContextMenuStrip
            If Me.cellTextBox Is Nothing Then
                Me.cellTextBox = DirectCast(e.Control, TextBox)
                Me.cellTextBox.ContextMenuStrip = Me.ctx
            End If
        End If
    End Sub