2013-06-19 4 views
2

양식에 DataGridView이 있습니다. 행을 마우스 오른쪽 버튼으로 클릭하면 컨텍스트 메뉴를 여는 프로그램이 필요합니다. 이 컨텍스트 메뉴를 사용하여 DataGridView의 데이터를 수정할 수 있어야합니다.mouse_click 이벤트에서 DataGridView의 행 선택

마우스 오른쪽 버튼을 클릭하는 위치를 표시하는 컨텍스트 메뉴가 표시되었지만 여기에서 어디로 가야할지 잘 모릅니다. 내가 (예를 들어) 전체 행을 삭제할 것이므로, 나는 상기 행의 인덱스를 가져 와서 선택하도록 설정해야합니다. cell_clicked 이벤트로 시도했지만 왼쪽 또는 오른쪽 마우스 버튼을 눌렀는지 확인할 수 없습니다. 그러나 mouse_click 이벤트를 사용하면 행 인덱스를 가져올 수 없습니다. 내가이 방법을 시도

public Form() 
{ 
    ContextMenu contextMenu = new ContextMenu(); 

    //Fill Context Menu 
    MenuItem delete = new MenuItem("Delete"); 
    contextMenu.MenuItems.Add(delete); 
} 

private void grdSchedules_MouseClick(object sender, MouseEventArgs e) 
{ 
    if (e.Button == System.Windows.Forms.MouseButtons.Right) 
    { 
     contextMenu.Show(grdSchedules, new Point(e.Y, e.Y));  
     //Get rowindex here and select row   
    } 
} 

: 나는 해결책을 발견

private void grdSchedules_CellClick(object sender, DataGridViewCellEventArgs e) 
    { 
     if (e.Button == System.Windows.Forms.MouseButtons.Right) //e.Button does not work here 
     { 
      contextMenu.Show(grdSchedules, new Point(e.Y, e.Y));     
     } 
    }   
+0

당신은 당신의'CellClick'에'e.X'과'e.Y' 대신에'MousePosition'를 사용할 수 있습니다. 좌표를 격자 공간으로 변환해야 할 수도 있지만, 이는 그리 쉬운 일이 아닙니다. – DonBoitnott

+0

이것은 당신을 도울 것입니다 : http://stackoverflow.com/questions/1718389/right-click-context-menu-for-datagrid – computer10171

+0

나는 그것을 작동 시켰습니다. 답변을 포함하도록 위의 게시물을 편집했습니다 ... – LeonidasFett

답변

1

여기 내 코드입니다. 여기에 내가 그것을 어떻게입니다 : 당신은 대신 grdSchedules_MouseClick 또는 grdSchedules_CellClickgrdSchedules_MouseDown 또는 grdSchedules_MouseUp 이벤트를 사용했습니다 수

 private void grdSchedules_MouseClick(object sender, MouseEventArgs e) 
     { 
      if (e.Button == System.Windows.Forms.MouseButtons.Right) 
      { 
       int currentMouseOverRow = grdSchedules.HitTest(e.X, e.Y).RowIndex; 

       for (int x = 0; x < grdSchedules.Rows.Count; x++) 
       { 
        if (grdSchedules.Rows[x].Index == currentMouseOverRow) 
        { 
         grdSchedules.Rows[x].Selected = true; 
        } 
        else 
        { 
         grdSchedules.Rows[x].Selected = false; 
        }      
       } 

       contextMenu.Show(grdSchedules, new Point(e.Y, e.Y)); 

      } 
     } 
0

.

6

나는 모든 데이터 그리드에서 작동하는 더 간단하고 빠른 일반 메서드를 만들었습니다. 이 방법을 사용하면 오른쪽 클릭으로 행을 선택할 수 있습니다. 당신의 DataGridViews ' "MouseDown"이벤트에이 방법을 추가

public void DataGridView_RightMouseDown_Select(object sender, MouseEventArgs e) 
    { 
     // If the user pressed something else than mouse right click, return 
     if (e.Button != System.Windows.Forms.MouseButtons.Right) { return; } 

     DataGridView dgv = (DataGridView)sender; 

     // Use HitTest to resolve the row under the cursor 
     int rowIndex = dgv.HitTest(e.X, e.Y).RowIndex; 

     // If there was no DataGridViewRow under the cursor, return 
     if (rowIndex == -1) { return; } 

     // Clear all other selections before making a new selection 
     dgv.ClearSelection(); 

     // Select the found DataGridViewRow 
     dgv.Rows[rowIndex].Selected = true; 
    } 
관련 문제