显示ContextMenuStripItem而不单击当前单元格

时间:2017-05-11 12:26:57

标签: vb.net contextmenu infragistics ultragrid

我正在使用UltraGridContextMenuStrip包含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而不是此菜单? enter image description here

上图显示了在编辑模式下右键单击单元格时当前显示的内容(单元格是右下角的白色单元格)。我不希望这出现,而是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

但是在单元格不再处于编辑模式之前,这不会触发。

以下答案中的任何一个都不会解决问题。仍然需要回答

2 个答案:

答案 0 :(得分:2)

当网格的任何单元格进入编辑模式时,将在单元格上绘制TextBox。这里很好的部分是这个文本框被重用于网格中的所有单元格。在编辑模式下右键单击单元格时,将显示来自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

答案 1 :(得分:1)

我尝试使用此代码

为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