Articles in this section
Category / Section

How to display a context menu in the center of the CurrentCell or selected cells in WinForms GridControl?

2 mins read

Context menu

The context menu appears at the Grid with respect to the current pixel position of the Grid. When you right-click on a Grid, it pops up with the current pixel position as the starting point. To display the context menu at the center of the cell/Range of selected cells refer to the following solution.

Solution

You can display the context menu at the center of the current cell or selected cells by handling the Grid's MouseDown event. In the event handler, the center location of the current cell or the selected range is calculated by using the GridUtil.CenterPoint() and the context menu is displayed after moving the cursor to the center point.

C#

//In Form_Load
this.gridControl1.MouseDown += gridControl1_MouseDown;
void gridControl1_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Right)
    {
        GridCurrentCell cc = this.gridControl1.CurrentCell;
        // To retrieve mouse position
        Point pt = new Point(e.X, e.Y);
        // Selecting more than one Cell
        if (this.gridControl1.Selections.Ranges.Count > 0) 
        {
            //Get the center point from the selected range. 
            pt = GridUtil.CenterPoint(this.gridControl1.RangeInfoToRectangle(this.gridControl1.Selections.Ranges.ActiveRange));
            Cursor.Position = this.gridControl1.PointToScreen(pt);
        }
        // Single Cell
        else if (cc.HasCurrentCell) 
        {
            pt = GridUtil.CenterPoint(this.gridControl1.RangeInfoToRectangle(cc.RangeInfo));
            Cursor.Position = this.gridControl1.PointToScreen(pt);
        }
        // To Show ContextMenu
        this.contextMenu1.Show(this.gridControl1, pt); 
    }
}

 

VB

'In Form_Load
Me.gridControl1.MouseDown += gridControl1_MouseDown
Private Sub gridControl1_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs)
    If e.Button = MouseButtons.Right Then
         Dim cc As GridCurrentCell = Me.gridControl1.CurrentCell
         ' To retrieve mouse position
         Dim pt As New Point(e.X, e.Y)
         ' Selecting more than one Cell
         If Me.gridControl1.Selections.Ranges.Count > 0 Then
             'Get the center point from the selected range. 
             pt = GridUtil.CenterPoint(Me.gridControl1.RangeInfoToRectangle(Me.gridControl1.Selections.Ranges.ActiveRange))
  Cursor.Position = Me.gridControl1.PointToScreen(pt)
             ' Single Cell
         ElseIf cc.HasCurrentCell Then
             pt = GridUtil.CenterPoint(Me.gridControl1.RangeInfoToRectangle(cc.RangeInfo))
             Cursor.Position = Me.gridControl1.PointToScreen(pt)
         End If
         ' To Show ContextMenu
         Me.contextMenu1.Show(Me.gridControl1, pt)
    End If
End Sub

 

Note:

When you right-Click on the Grid control, the context menu is shown.

 

Context menu in the center position of the current cell

Figure 1: Context menu in the center position of the current cell

Context menu in the center position of the selected range of cells

Figure 2: Context menu in the center position of the selected range of cells

Samples:

C#: CenterContextMenu

VB: CenterContextMenu

 

Did you find this information helpful?
Yes
No
Help us improve this page
Please provide feedback or comments
Comments (0)
Please sign in to leave a comment
Access denied
Access denied