DataGridView에서 파생 된 사용자 정의 컨트롤에서 Ctrl + C 복사 작업을 구현하려고합니다.데이터가 있거나없는 DataGridView의 키 누르기 수정 자
데이터 격자보기에서 선택한 셀을 복사하려면 Ctrl + C를, 셀 열 머리글 텍스트는 및으로 복사하려면 Ctrl + Shift + C를 누릅니다.
두 개의 복사 루틴을 설정했으며 제대로 작동합니다. 내가 겪고있는 문제는 key_down 처리기를 할당하는 것입니다. 여기에 이해가 안 비트입니다 : 나는이 빈 그리드 시도 (즉, 데이터가없는, 열 등), 내가 얻을
protected virtual void DataGridViewEx_KeyDown(object sender, KeyEventArgs e)
{
System.Diagnostics.Debug.WriteLine("-------------------------------");
System.Diagnostics.Debug.WriteLine("KeyCode = " + e.KeyCode.ToString());
System.Diagnostics.Debug.WriteLine("KeyValue = " + e.KeyValue.ToString());
System.Diagnostics.Debug.WriteLine("KeyData = " + e.KeyData.ToString());
System.Diagnostics.Debug.WriteLine("Modifiers = " + e.Modifiers.ToString());
System.Diagnostics.Debug.WriteLine("-------------------------------");
if ((e.Control & e.Shift) && e.KeyCode == Keys.C)
{
System.Diagnostics.Debug.WriteLine("CTRL+SHIFT+C Pressed");
CopyToClipboard(CopyMode.SelectedCellsWithHeaders);
e.Handled = true;
}
if (e.Control && e.KeyCode == Keys.C)
{
System.Diagnostics.Debug.WriteLine("CTRL+C Pressed");
CopyToClipboard(CopyMode.SelectedCellsOnly);
e.Handled = true;
}
else if (e.Control && e.KeyCode == Keys.V)
{
PasteClipboard();
e.Handled = true;
}
}
이제 다음은
내를 keyDown 코드 다음Ctrl + C :
에서 KeyCode = C 키 값 = 67 KeyData = C, 시프트, 컨트롤 수정 = 시프트, 계속 ROL
Ctrl 키 + Shift + C
에서 KeyCode = C 키 값 = 67 KeyData = C, 시프트, 컨트롤 수정 = 시프트, 컨트롤
하지만 : 나는 일단 " 그리드에 데이터를 붙여 넣은 경우 똑같은 keydown 작업을 통해 다음 결과를 얻을 수 있습니다.
Ctrl + C
,515,에서 KeyCode = C 키 값 = 67 KeyData = C 제어 수정 = 제어
Ctrl 키 + 시프트 + C
에서 KeyCode = ShiftKey 키 값 = 16 KeyData = ShiftKey , 시프트, 컨트롤 변경자 = 시프트, 컨트롤
그리드에 데이터가있을 때 "C"키 누르기가 더 이상 인식되지 않고 Ctrl + Shift 만 누릅니다.
셀이 편집 모드에 있지 않습니다 (Ctrl + C가 잘 작동하는 것을 볼 수 있음). 대신 Ctrl + K와 같은 것으로 변경할 수 있지만 여기에서 어떤 일이 벌어지고 있는지 이해하고 싶습니다. 어떤 아이디어?
고맙습니다! 그것은 작동하고, 나는 무슨 일이 일어나고 있는지 알 것 같습니다. ProcessCmdKey가 여기서 무엇을하는지 살펴 보았습니다. [link] (https://msdn.microsoft.com/en-us/library/system.windows.forms.control.processcmdkey%28v=vs.110%29.aspx?f = 255 & MSPPError = -2147217396). 컨트롤에 상황에 맞는 메뉴가 있는지 확인합니다. 글쎄, 내 컨트롤에 컨텍스트 메뉴가 있지만 Datagridview에 데이터가 있는지 만 보여줍니다. 내 예제에서는 상황에 맞는 메뉴가 표시되지 않을 때로드되는 데이터가없는 상태에서 작업 중이라고 생각합니다. – ainwood