我正在使用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
但是在单元格不再处于编辑模式之前,这不会触发。
以下答案中的任何一个都不会解决问题。仍然需要回答
答案 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