2011-01-09 6 views
1

나는 델파이 7의 간단한 프로그램을 기본 폼에 가지고있다. 기본 양식의 버튼을 클릭하면 두 번째 양식이 열립니다. 두 번째 양식을 닫을 때 주 양식 OnActivate 이벤트를 실행하지 못하게하려면 어떻게해야합니까? (코드 제외 : MainForm.OnActivate = 전무)메인 폼을 실행하지 못하도록 함 OnActivate 이벤트

감사

+2

OnActivate 이벤트 처리기에는 Form2가 닫힐 때 실행해서는 안되며, 다른 경우 (예 : 사용자가 앱에서 전환하여 돌아올 때)에 실행해야하는 이유는 무엇입니까? 이 질문에 대한 대답은 필요한 솔루션을 크게 결정합니다. –

+3

잘못된 OnActivate 사용을 의심하고 문제를 해결할 것입니다. –

+1

실제로 MainForm.OnActivate에서 발생하는 현상이 약간의 소리처럼 들리지만 사실 실제 문제입니다. –

답변

2

쉬운 가능성

MainForm.OnActivate := NIL; 
Form2.ShowModal; 
MainForm.OnActivate := MainFormOnActivate; 

델파이 이후 버전과의 호환성을 깰 수있는 다른 뭔가를 사용하여 ...

+2

Form2.Show가 사용 된 경우에는 아무 효과가 없습니다. –

+0

@ David Heffernan 귀하의 요지를 이해할 수 있는지 확실하지 않습니다. 조금 더 구체적으로 말씀해 주시겠습니까? 나는 지난 며칠간 조금 느리다 : -P – ComputerSaysNo

+0

Re [David 's comment] : OnActivate가 'nil'로 변경되면 form2가 표시되고 OnActivate는 다시 변경되지만 (form2는 계속 표시됨); 잠시 후 사용자가 form2를 닫고 form1의 OnActivate가 트리거됩니다. – gabr

5

좋은 속기에 대한 GpStuff (BSD License)을 사용하여 이벤트를 일시적으로 사용 중지 :

uses 
    GpStuff; 

with DisableHandler(@@MainForm.OnActivate) do 
    Form2.ShowModal; 
+1

약간 씩보기 흉하게 보이는 이중 포인터 참조에도 불구하고, 나는 이것을 절대적으로 멋진 해결책으로 생각한다. +1 –

+0

이것은 이벤트 속성이 실제로 필드에 직접 저장된 경우에만 작동한다고 생각합니다. 이는 대부분의 VCL 이벤트에는 해당되지만 일반적으로 일반적인 이벤트에는 해당되지 않습니다. BTW : +1; 자동 정리를위한 인터페이스를 리턴하는 함수가 마음에 들지만, 나는 그 자신을 많이 사용하고 있지만, 소수의 사람들 만 볼 수있다. –

+0

Trinary operator, ORLY? 어쨌든, 과용. –

관련 문제