코딩을 발생 때 onKeyPress가 :델파이 - TStringGrid에 때 onKeyPress 이벤트 핸들러를 연결, 새로운 캐릭터와 TStringGrid 업데이트 세포 전에 델파이
사용자가에 입력 된 그리드 셀 전에 때 onKeyPress 이벤트가 발생 실제로 그 값을 업데이트했습니다 누를 수있는 키가 있습니다. 이것은 분명히 문제가됩니다. 사용자가 수정함에 따라 현재이 셀의 내용이 인 것처럼 알고 싶습니다.
"해킹 된"솔루션은 모든 세부 사항을 고려하지 않은 경우 간단합니다. 셀에서 값을 가져온 다음 OnKeyPress 이벤트가 키 매개 변수와 함께 나오므로 해당 값을 끝점에 추가하십시오. 이제 셀의 현재 값을 얻었습니다!
거짓입니다. 사용자가 셀의 모든 텍스트 (예 : "foo")를 선택하고 현재 'b'를 입력하면 어떻게 될까요? 그들은 텍스트를 선택했기 때문에 지워지고 문자 'b'로 바뀝니다. 그러나 셀 값은 여전히 OnKeyPress에서 "foo"로 표시되고 Key 값이이면 'b'가됩니다. 따라서 위의 논리에 따라 응용 프로그램에서 셀에 "foob"이 포함되어 있다고 결론을 내릴 수 있습니다. 우리는 사실이 아님을 압니다.
So. 아무도이 문제를 해결하는 방법을 알고 있습니까? OnKeyPress가 그리드의 내용이 업데이트 된 후 또는 처리기의 시작 부분에 업데이트를 강제하는 방식으로 반응하는 방법이 있습니까? 필자는 OnKeyUp 이벤트의 사용을 필사적으로 피하고 있습니다. 따라서 다른 제안은 제외하고 크게 감사하겠습니다.
"왜 OnKeyUp 이벤트 사용을 필사적으로 피하고 있습니까?" –
컨트롤이 키를 처리하고 그에 따라 내용을 업데이트하기 전에 OnKeyPress가 시작됩니다. 원하는 경우 앱의 코드가 키를 미리 거부 할 수 있습니다. –
@Remy : 예, Deltics에서 이미 설명해 주었고 답변도 함께 제공했습니다. @Mason : OnKeyUp은 ASCII뿐만 아니라 모든 키를 감시합니다. 원하지 않는 것들을 걸러 낼 많은 노력이 필요합니다. OnKeyUp을 사용하여 문제가 발생했습니다 (예 : KeyDown이 다른 구성 요소에있을 때 KeyUp 잡기 - 바람직하지 않음). OnKeyPress를 사용하여 리팩토링 한 이유는 다시 돌아가서 사용하기가 무의미합니다 * . ** OnSetEditText **가 나를 위해 완벽하게 작동해야합니다. – JMTyler