2011-08-25 6 views
1

아래의 코드에서 사용자가 DataGridView의 셀을 마우스 오른쪽 버튼으로 클릭하면 상황에 맞는 메뉴가 표시됩니다. 사용자가 마우스 오른쪽 버튼을 클릭하여 배경색을 변경하면 셀을 볼 수 있습니다. "마우스 오른쪽 버튼으로 클릭"했습니다. 이 문제가 발생하도록 아래 코드에 뭔가를 추가하는 방법이 있습니까?DataGridView에서 선택한 셀을 강조 표시 하시겠습니까?

private void dataGridView2_MouseClick(object sender, MouseEventArgs e) 
    { 
     if (e.Button == MouseButtons.Right) 
     { 
      ContextMenu m = new ContextMenu(); 
      MenuItem mnuCopy = new MenuItem("Copy"); 
      mnuCopy.Click += new EventHandler(mnuCopy_Click); 
      m.MenuItems.Add(mnuCopy); 

      int currentMouseOverRow = dataGridView2.HitTest(e.X, e.Y).RowIndex;    

      m.Show(dataGridView2, new Point(e.X, e.Y)); 

     } 
    } 

답변

2

분명히 당신은 내 워크 스테이션을 해킹하고 내가 최근에 작업 한 것들 중 일부를 보았습니다. 나는 당신이하고 싶은 것을 정확히하지 않았기 때문에 약간의 과장을했지만 약간의 조정만으로 나는 과장되었다.

나는 MouseClick 이벤트를 수정하여 DGV의 CurrentCell을 얻습니다. 일단 가지고 있다면 SelectionBackColor으로 CurrentCellStyle 속성을 설정하십시오. 이런 식으로 뭔가 :

// ... 
DataGridView.HitTestInfo hti = dataGridView2.HitTest(e.X, e.Y); 
if (hti.Type == DataGridViewHitTestType.Cell) { 
    dataGridView2.CurrentCell = dataGridView2.Rows[hti.RowIndex].Cells[hti.ColumnIndex]; 
    dataGridView2.CurrentCell.Style = new DataGridViewCellStyle { SelectionBackColor = System.Drawing.Color.Yellow}; 
} 
//... 

위의 약간의 '에어 코드 y는'(즉 내가 코드와 병합하여 실행하려고 시도하지 않은)하지만 난 당신이 아이디어를 얻을 희망입니다. 히트 테스트를 통해 셀을 클릭했는지 확인합니다. 그렇게하지 않으면 사용자가 셀을 클릭하지 않으면 몇 가지 문제가 발생할 수 있습니다.

이제이 코드가 마우스 오른쪽 버튼으로 클릭하는 모든 셀에 대해 SelectionBackColor을 변경하는 문제가 있습니다. 즉, DGV의 CellLeave 이벤트에서이 속성을 복원하기 쉽습니다 :

private void dgvBatches_CellLeave(object sender, DataGridViewCellEventArgs e) { 
    dataGridView2.CurrentCell.Style = new DataGridViewCellStyle { SelectionBackColor = System.Drawing.SystemColors.Highlight }; 
} 

내가이 시각에 영향을 기억해야 할 것이다; 질문을 해줘서 고마워.

+0

워크 스테이션을 해킹해서 죄송합니다. 오, 사무실에있는 숨겨진 카메라도 무시하십시오. 또한 NURV 소프트웨어에서 Gary Winston이라는 사람으로부터 전화가 오면 전화를 끊습니다. 감사!! – Kevin

관련 문제