)
We use cookies to give you the best experience on our website. If you continue to browse, then you agree to our privacy policy and cookie policy. (Last updated on: June 24, 2019).
Unfortunately, activation email could not send to your email. Please try again.
Syncfusion Feedback

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

Platform: WinForms |
Control: GridControl |
Published Date: April 30, 2011 |
Last Revised Date: December 19, 2019

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

 

2X faster development

The ultimate WinForms UI toolkit to boost your development speed.
ADD COMMENT
You must log in to leave a comment

Please sign in to access our KB

This page will automatically be redirected to the sign-in page in 10 seconds.

Up arrow icon

Warning Icon You are using an outdated version of Internet Explorer that may not display all features of this and other websites. Upgrade to Internet Explorer 8 or newer for a better experience.Close Icon

Live Chat Icon For mobile
Live Chat Icon