2011-09-13 13 views
9

Sto tentando di aprire uno contextmenustrip nel punto in cui ho fatto clic con il pulsante destro del mouse, ma viene sempre visualizzato nella parte superiore sinistra dello schermo.Impossibile impostare la posizione di un contextmenustrip?

Ecco il codice che ho usato:

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

vostra piattaforma aiuterebbe molto. (silverlight, wpf, asp.net, winforms, ecc.) –

risposta

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

la ragione non è che appare è perché si sta utilizzando e.X e e.Y per i valori. Non sono la posizione effettiva sullo schermo. Sono la posizione del mouse all'interno del datagrid. Quindi, dì che hai fatto clic sulla prima cella della prima riga, che sarà vicino alla parte superiore sinistra di quel componente. e.X e e.Y sono le posizioni del mouse all'interno del componente.

2

supponendo che si sono in Windows Form, provate questo:

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); 
    ... 
    ... 
Problemi correlati