문제

Borland C ++ Builder의 대화 상자에서 Escape Key Handler에 다소 당황한 문제가 있습니다.

  1. "취소"버튼 (TBITBTN)에는 취소 속성이 true로 설정되어 있습니다.
  2. "취소"버튼에는 기본 속성이 False로 설정되어 있습니다.
  3. "취소"버튼에는 Modalresult가 Mrcancel로 설정되어 있습니다.

참고 : Borland C ++ Builder 5에서 여전히 컴파일되고있는 오래된 레거시 앱으로 작업하고 있습니다. 우리는이를 대체 할 별도의 프로젝트가 있습니다. 나는 단지 수명 유지 관리를하고 있습니다.

업데이트

4 개월 후 나는 마침내 머리를 긁는 것을 멈추지 않았습니다 ... 응용 프로그램의 상위 양식에는 런 타임 onshortcut 핸들러가 정의되어 있음이 밝혀졌습니다. ESC 핸들러가 어린이 대화 상자에서 작동하기 위해 비활성화해야했습니다.

도움이 되었습니까?

해결책

취소 이벤트를 차단할 수있는 모든 방법을 확인해야합니다.

  1. 우선, 취소 버튼을 클릭하는 것이 실제로 양식을 닫는지 확인하십시오.

  2. 그런 다음 다른 버튼에 취소 속성이 True로 설정되어 있는지 확인하십시오.

  3. 그 후 모든 주요 이벤트 핸들러를 확인한 후, 특히 KeyyPreview가 활성화 된 경우 양식의 이벤트 처리기를 잊지 마십시오.

  4. 여전히 문제를 찾지 못하면 다른 구성 요소에 Escape 키를 처리 할 수있는 바로 가기 속성이 있는지 확인하십시오.

  5. 또한 키보드 후크 활성이 있는지 확인하십시오.

다른 팁

양식의 키프 리뷰 속성이 True로 설정되었을 수 있습니다. 이것은 탈출 키가 종종/장애가있을 가능성이있는 곳입니다. Keypreview 속성은 종종 양식을 닫지 않고 다음 필드로 전진하도록 [return] 키 프레스 (즉, onkeypress)를 캡처 할 수 있습니다.

다른 대화 상자를 만들고 취소 버튼을 추가하고 Escape 키가 작동하는지 확인할 수도 있습니다. 그런 다음 두 형태의 DFM 소스를 비교하고 설정의 차이점을 확인하십시오.

논리가 포함 된 "Canclose"유형 이벤트가 있습니까?

또한 단지 show ()가 아닌 showmodal ()을 통해 대화 상자를 호출해야한다는 점을 명심하십시오. 예를 들어, 귀하의 양식이 "FaskDialog"라는 이름이 표시되면 표시되는 코드는

faskdialog-> showmodal ();

보다는

faskdialog-> show ();

대화 상자가 show ()을 통해 호출되면 취소 키를 누르거나 modalresult = mrcancel을 설정하면 대화 상자가 닫히지 않습니다.

이것은 오래된 질문입니다. 답을 줄 수 있습니다.

kyypreview = true를 설정 한 다음 ESC 키를 가두려면 코드를 작성해야합니다.

form1 :: onkeyup (...)
{
if (key == 27) {
닫다();
}
}

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top