2011-09-13 45 views
9

Tôi đang cố mở một số contextmenustrip tại vị trí mà tôi đã nhấp chuột phải, nhưng nó luôn hiển thị ở trên cùng bên trái của màn hình.Không thể đặt vị trí của contextmenustrip?

Đây là mã tôi đã sử dụng:

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

nền tảng của bạn sẽ giúp rất nhiều. (silverlight, wpf, asp.net, winforms, v.v.) –

Trả lời

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

lý do nó không xuất hiện là bởi vì bạn đang sử dụng e.X và e.Y cho các giá trị. Chúng không phải là vị trí thực tế trên màn hình. Chúng là vị trí của con chuột trong datagrid. Vì vậy, nói rằng bạn đã nhấp vào ô đầu tiên của hàng đầu tiên, sẽ nằm gần phía trên cùng bên trái của thành phần đó. e.X và e.Y là các vị trí chuột trong thành phần.

2

giả sử bạn đang ở trong Windows Forms, thử điều này:

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); 
    ... 
    ... 
Các vấn đề liên quan