2011-09-13 13 views
9

Estoy tratando de abrir un contextmenustrip en el lugar donde hice clic con el botón derecho del mouse, pero siempre se muestra en la parte superior izquierda de la pantalla.¿No se puede establecer la posición de un contextmenustrip?

Aquí está el código que utilicé:

private void dataGridView1_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Right) 
    { 
     contextMenuStrip1.Show(new Point(e.X,e.Y)); 
     doss.getdossier(connection.conn, Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[0].Value)); 
    } 
} 
+1

su plataforma ayudaría mucho. (silverlight, wpf, asp.net, winforms, etc.) –

Respuesta

11
if (e.Button == MouseButtons.Right) 
{ 
    contextMenuStrip1.Show(Cursor.Position); 
} 

la razón por la que no está apareciendo es porque está utilizando e.X y e.Y para los valores. No son la ubicación real en la pantalla. Son la ubicación del mouse dentro de la cuadrícula de datos. Entonces, digamos que hizo clic en la primera celda de la primera fila, que estará cerca de la parte superior izquierda de ese componente. e.X y e.Y son las ubicaciones del mouse dentro del componente.

2

asumiendo que son en las formas de Windows, intente esto:

if (e.Button == MouseButtons.Right) 
{ 
    Control control = (Control) sender; 

    // Calculate the startPoint by using the PointToScreen 
    // method. 

    var startPoint = control.PointToScreen(new Point(e.X, e.Y)); 
    contextMenuStrip1.Show(startPoint); 
    ... 
    ... 
Cuestiones relacionadas