Solved

display contextmenu at cursor position

Posted on 2011-03-19
5
1,563 Views
Last Modified: 2012-06-27
I need to display a menu at cursor position when user rigth click in a cell in a datagridview.
I'm including my code, the menu is displayed at top of the datagridview (dgv1), not at cursor position.
Thanks.
Private Sub dgv1_CellMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles dgv1.CellMouseClick
        If e.Button = Windows.Forms.MouseButtons.Right Then
            Dim p As New Point(e.X, e.Y)
            mnuOrdenes.Show(dgv1, p)
        End If
    End Sub

Open in new window

0
Comment
Question by:BemboX
  • 2
  • 2
5 Comments
 
LVL 47

Expert Comment

by:Wayne Taylor (webtubbs)
ID: 35173009
Why not simply set the "ContextMenuStrip" property of the DataGriView to "mnuOrdenes"? That will do exactly as you require.
0
 

Author Comment

by:BemboX
ID: 35173057
Because it displays the menu although the datagridview is empty (without rows) or the user clicks outside datagrid cells.
0
 
LVL 47

Expert Comment

by:Wayne Taylor (webtubbs)
ID: 35173098
In that case, you can use the ContextMenuStrip's Opening event to perform a hittest on the DGV to determine where it is clicked, and if not a cell, cancel the context menu.

    Private Sub ContextMenuStrip1_Opening(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles ContextMenuStrip1.Opening
        Dim ht As DataGridView.HitTestInfo = DataGridView1.HitTest(Cursor.Position.X, Cursor.Position.Y)
        If ht.Type <> DataGridViewHitTestType.Cell Then
            e.Cancel = True
        End If
    End Sub

Open in new window


Wayne
0
 
LVL 5

Expert Comment

by:samml
ID: 35174996
Your problem is that the coordinates you get using e are relative and relate to the cell, not the GDV.
0
 
LVL 5

Accepted Solution

by:
samml earned 500 total points
ID: 35175003
Try this:
        If e.Button = Windows.Forms.MouseButtons.Right Then
            ContextMenuStrip1.Show(DataGridView1, Point.Add(DataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, True).Location, e.Location))
        End If

Open in new window

0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Welcome my friends to the second instalment and follow-up to our Minify and Concatenate Your Scripts and Stylesheets (http://www.experts-exchange.com/Programming/Languages/.NET/ASP.NET/A_4334-Minify-and-Concatenate-Your-Scripts-and-Stylesheets.html)…
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
This Micro Tutorial will teach you how to censor certain areas of your screen. The example in this video will show a little boy's face being blurred. This will be demonstrated using Adobe Premiere Pro CS6.
This is used to tweak the memory usage for your computer, it is used for servers more so than workstations but just be careful editing registry settings as it may cause irreversible results. I hold no responsibility for anything you do to the regist…

920 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now