VS2010 C# .Net 4.1IsInputKey가 true로 설정된 경우 PreviewKeyDown 이벤트가 두 번째로 호출되는 이유는 무엇입니까?
사용자가 ComboBox
에 초기 데이터를 선택하거나 입력해야하는 양식 작업 중입니다. 추측하는 데 시간이 걸리는 아래 코드를 사용하여 데이터가 맞으면 사용자가 Tab
키를 누를 때 편집 버튼을 사용할 수 있습니다. 그렇지 않으면 버튼이 비활성화되어 다음 버튼으로 이동합니다.
이 코드는 작동하지만 IsInputKey
을 true로 설정하면 PreviewKeyDown
이벤트가 다시 발생합니다. 이렇게하면 유효성 검사가 두 번 호출됩니다. KeyDown
이벤트는 한 번만 호출되며 두 번째 호출에서는 IsInputKey
이 다시 거짓이므로 유효성 검사를 다시 확인해야합니다.
저는 왜 그런지 이해하고 싶습니다.
private void comboBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) {
if (e.KeyData == Keys.Tab) {
if (ValidationRoutine()) {
e.IsInputKey = true; //If Validated, signals KeyDown to examine this key
} //Side effect - This event is called twice when IsInputKey is set to true
}
}
private void comboBox1_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyData == Keys.Tab) {
e.SuppressKeyPress = true; //Stops further processing of the TAB key
btnEdit.Enabled = true;
btnEdit.Focus();
}
}
는 PreviewKeyDown이 /가 .. 실제에서 KeyDown 이벤트 전에 트리거됩니다 발생 ... 당신이 PreviewKeyDown의 코드를 제거하고 다른 이벤트 처리기에 코드를 추가하는 시도 – MethodMan
@DJ 크라는-이이었다 그것되어 있습니다 KeyDown 이벤트에서 Tab이 눌려 지도록 허용해야합니다. 내가 그것을 서 프레스하지 않으면 내 목표 버튼이 제때에 활성화되지 않았기 때문에 순서의 다음 버튼으로 포커스가 이동합니다. 나는 다른 곳에서 전체 유효성 검사를 할 수 있으며이 테스트에 대한 간단한 플래그를 확인할 수 있습니다. 하지만 왜 두 번 부름 받았는지 알고 싶습니다. –