2011-09-13 4 views
9

마우스를 오른쪽 버튼으로 클릭 한 위치에서 contextmenustrip을 열려고 시도하지만 항상 화면의 왼쪽 상단에 표시됩니다. 당신이 값을 e.X 및 e.Y을 사용하고 있기 때문에컨텍스트 메뉴의 위치를 ​​설정할 수 없습니까?

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

플랫폼이 많이 도움이 될 것이다. (실버 라이트, wpf, asp.net, winforms 등) –

답변

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

가 나타나지 않는 것 이유는 다음과 같습니다

은 내가 사용하는 코드입니다. 그것들은 화면상의 실제 위치가 아닙니다. 그것들은 DataGrid 내의 마우스 위치입니다. 첫 번째 행의 첫 번째 셀을 클릭하면 해당 구성 요소의 왼쪽 상단 근처에 표시됩니다. e.X 및 e.Y는 구성 요소 내의 마우스 위치입니다.

2

당신이 윈도우 폼에있는 가정이 시도 :

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