4
DataGridView 셀에서 KeyDown 이벤트를 처리하려고합니다. 셀에 KeyDown 이벤트를 가져 오는 데 다음 코드를 사용합니다.Winform Datagridview 핸들 탭 및 화살표 키
private void dgvData_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
var tb = (DataGridViewTextBoxEditingControl)e.Control;
tb.KeyDown += cell_KeyDown;
}
그러나 탭과 화살표 같은 특수 키는 처리 할 수없는 것처럼 보입니다. 이러한 키는 내 cell_KeyDown 메서드로 이동하지 않습니다. 그래서 DataGridView의 KeyDown 이벤트에서 처리하려고합니다 :
private void dgvData_KeyDown(object sender, KeyEventArgs e)
{
// handle keys
}
그 경우에도 여전히 Tab 키를 캡처 할 수 없습니다. 화살표 키를 캡처 할 수는 있지만 사용자 지정 이벤트를 처리 한 후에도 화살표로 다른 셀로 이동합니다. 나는 세포에 머물고 싶다.
그때 나는이 같은 DataGridView를 확장 :class DataGridViewSp : DataGridView
{
protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Tab)
{
//todo special handling
return true;
}
else if (keyData == Keys.Down)
{
//todo special handling
return true;
}
else if (keyData == Keys.Up)
{
//todo special handling
return true;
}
else
{
return base.ProcessDialogKey(keyData);
}
}
}
지금 나는이 재정의 ProcessDialogKey 방법에서 Tab 키를 캡처 할 수 있습니다. 그러나 그래도 아래쪽 화살표 키는 캡처하지 않습니다. 잘못된 것이 있습니까?
완벽한 솔루션은 셀 편집 모드에서 내 방향으로 탭과 화살표 키를 처리하고 셀에 머물러있을 때입니다. 그리드에서 화살표 키와 탭 키가 정상적으로 작동합니다.
작동합니다! 감사! 나는 좋은 것을 가지고있다. DataGridview가 셀 편집 모드에 있는지 확인하는 방법은 무엇입니까? 따라서 사용자가 셀을 편집 할 때만 특수 키 처리를 활성화 할 수 있습니다. – Ryan
아마도'dataGridView1.IsCurrentCellInEditMode'를 사용할 수 있습니다. 그것이 도움이된다면 답을 받아 들여야한다는 것을 잊지 마십시오. –
감사합니다. Rikki. 너는 매우 도움이된다. – Ryan