Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

display contextmenu at cursor position

Posted on 2011-03-19
5
Medium Priority
?
1,783 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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 2000 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

Quick Start: DOCKER

Sometimes you just need a Quick Start on a topic in order to begin using it.. this is just what you need to know to get up and running with Docker!

Question has a verified solution.

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

This article describes relatively difficult and non-obvious issues that are likely to arise when creating COM class in Visual Studio and deploying it by professional MSI-authoring tools. It is assumed that the reader is already familiar with the cla…
This document covers how to connect to SQL Server and browse its contents.  It is meant for those new to Visual Studio and/or working with Microsoft SQL Server.  It is not a guide to building SQL Server database connections in your code.  This is mo…
This course is ideal for IT System Administrators working with VMware vSphere and its associated products in their company infrastructure. This course teaches you how to install and maintain this virtualization technology to store data, prevent vuln…
How to fix incompatible JVM issue while installing Eclipse While installing Eclipse in windows, got one error like above and unable to proceed with the installation. This video describes how to successfully install Eclipse. How to solve incompa…

722 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