2011-09-13 14 views
9

Fareyi sağ tıklattığım yerde bir contextmenustrip açmaya çalışıyorum, ancak her zaman ekranın sol üstünde görünür. Eğer değerler için e.X ve e.Y kullanıyor çünküBir contextmenustrip'in konumu ayarlanamıyor mu?

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

Platformunuz çok yardımcı olacaktır. (silverlight, wpf, asp.net, winforms, vb.) –

cevap

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

o görünmüyorsa aşağıdakileri nedeni: Burada

kullandığım koddur. Ekrandaki gerçek konum değiller. Bunlar datagrid içindeki farenin yeridir. Yani, ilk satırın ilk hücresine tıkladınız, bu, bu bileşenin sol üst kısmına yakın olacak. e.X ve e.Y, bileşen içindeki fare konumlarıdır.

2

Windows Forms olduğunu varsayarak, bu deneyin:

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); 
    ... 
    ... 
İlgili konular