2013-07-03 4 views
0

두 개의 창이있는 작은 응용 프로그램이 있습니다. 두 번째 양식을 열 때 - 첫 번째 양식은 숨김 :Delphi. 하위 창에서 부모 창 표시

procedure TIndexForm.startButtonClick(Sender: TObject); 
begin 

    workingForm.Show(); // show second form 
    IndexForm.Hide(); // hide first form 

end; 

두 번째 창이 닫히면 - 앱이 계속 실행됩니다 (오른쪽). 하지만 초가 닫히면 첫 번째 창을 열고 싶습니다.

procedure TworkingForm.FormClose(Sender: TObject); 
begin 
    parent.Show(); 
end; 

그리고이 코드는 작동하지 않습니다. 어떻게 할 수 있습니까?

미리 감사드립니다. :)

+0

몇 가지 조언. "이 코드가 작동하지 않는다"고하지 마십시오. 일어날 것으로 예상되는 것과 실제로 발생하는 것을 알려주십시오. 오류 메시지가있는 경우 축 어적으로 포함하십시오. –

답변

1

나는 잘못된 이벤트를 사용했다고 생각합니다. 양식을 보이거나 숨기고있는 것 같습니다. 이벤트를 OnClose 대신 OnHide에 첨부하고 싶습니다.

Parent으로 전화하는 것은 실수입니다. windows 컨트롤의 Parent은 컨트롤을 포함하고 있습니다. 예를 들어 패널 안에 버튼을 배치하면 버튼의 부모가 패널이됩니다. 당신이 다른 상황에서 Show로 전화하기를 원할 것입니다.

1

두 가지 문제점이 있습니다. 첫째, 실제 처리기가 아닌 OnClose입니다. Visual Basic에서는 코드에 이름을 입력하기 만하면 이벤트 처리기를 만들 수 있지만 Delphi에서는 해당 이름이 적합하지 않습니다. 그것들은 폼이나 컨트롤의 이벤트 속성에 연결될 필요가 있으며, OnClose 이벤트에 두 개의 매개 변수 (하나가 아니라)가 필요하기 때문에이 매개 변수가 연결되지 않는다고 말할 수 있습니다. Object Inspector에서 이벤트를 두 번 클릭하면 IDE가 올바른 매개 변수로 이벤트 처리기를 생성하고 자동으로 이벤트에 연결합니다.

둘째, 표시 할 양식이 Parent이 아닙니다. 부모 창을 숨기면 모든 자식이 숨겨지기 때문에 분명합니다. 그러므로 두 가지 양식에는 부모 - 자식 관계가 없습니다. 첫 번째 양식에 할당되지 않은이 예 부모에서

IndexForm.Show; 
+0

'IndexForm.Show' 메서드를 사용하려면 두 번째 유닛에서 사용할 수 없으므로 첫 번째 폼 유닛을 추가해야합니다. 그러나 메모리 부족 오류입니다. –

+0

메모리 부족으로 아무런 관련이 없습니다. 그것은 완전히 별개의 문제입니다. –

0

:

는 다른 형태를 보여주고 싶은 경우

은, 당신이 먼저 그것을 숨기기 위해 사용되는 동일한 기술을 사용합니다. 구현 사용 절에 첫 번째 양식이있는 단위를 추가하거나 을 호출해야합니다 (예 : Application.MainForm.Show;

관련 문제