Q&A

  • MDI Child 폼 실행중인지...
MDI Child 폼이 실행중인지 알려고 합니다

프로그램의 Form Style 은
   MDI Form 1개 StayOnTop Form 2개로 구성되어 있습니다
   StayOnTop Form 을 각 A Form 과 B Form 이라할때

   A Form 실행중 B Form을 Call 을 해야하며
   Call 할 경우 A Form은 Close하고 B Form을 Create 해야합니다
   이때 B Form이 이미 존재한다면 A Form 은 그대로 Close 하고
   B Form을 Active 해야합니다
   B Form의 실행여부와 B Form을 활성화 할수 있 방법을 알려주십시요
  
   참고로 A Form은 Auto Create Form 이고
             B Form은 Available Form 입니다

답변주시면 감사하겠습니다...
즐거운 하루 되시길...
1  COMMENTS
  • Profile
    김경록 2003.05.02 01:00
    MDI 관련 Global변수를 사용하시면 문제가 없을 듯 합니다..
    실무에서 전 많이 사용해본경우라..
    흠..

    Form B를 생성시키기 위해 Button을 Click시 해당 Event에
    (단, B Form의 Name이 FormB라고 가정합니다.
    물론, A Form의 Name도 FormA라고 가정합니다.)

    Var
         lb_NoCreateFormB: Boolean;
         ll_Cnt, ll_Remove: Integer;
    Begin
        lb_NoCreateFormB := False;

        For ll_Cnt := 0To MDIChildren.MDIChildCount - 1 Do
           If MDIChildren[ll_Cnt] is TFormB Then //이미 생성되어져 있다면?
           Begin
                  For ll_Remove := 0 To MIDChildren.MDIChildCount - 1 Do
                       If MDIChildren[ll_Remove] is TFormA Then //A Form을 죽인다.
                       Begin
                             MDIChildren[ll_Remove].Free;
                             Break;  //요건 하시든 안하시든 폼이 2개만 있다면, 별 관계없음
                       End;

                  MDIChildren[ll_Cnt].SetFocus; //B Form을 Active 시켜준다.
                  lb_NoCreateFormB := True;

                  Break;
           End
           Else
                  lb_NoCreateFormB :=  lb_NoCreateFormB or False;

        If Not lb_NoCreateFormB Then //어라? 생성안되어져 있냐? 고럼 만들어야지~~
        Begin
            Application.CreateForm(FormB, TFormB);
             FormB.Show;
         End;

    End;

    위와 같이 하면 별 무리 없이 될겁니다..
    물론, 실무에서 잘 사용했던 적이 있어서..
    지금 테스트를 안해서 에러가 날지는 모르지만 어떻게 제어하는지는
    이해가 가실꺼라고 생각듭니다.
    단!!!  이런 문제가 발생할 수 있으니, 참고하십시오..

    A Form 이벤트 내에서 위의 For문을 실행했을 경우
    자신의 폼을 Free(제거)할 수 없습니다..
    왜냐?  자기가 실행중인데.. 아직 명령이 완료되지도 않았는데..
    (Event를 벗어나지도 않았는데..)
    자살한다.. 요거 이상하잖아여?   *^^*
    에러 납니다..
    요것만 주의하시면 문제 없을듯...
    제가 님의 질문을 해석하기에는
    Exclusive Active Form인거 같은데..
    위와 같이 하면 될겁니다..
    으샤~~~~
    힘내세염..
    제가 써본 툴만, VB, PB, Delphi (웹상에서 사용하는거 제외)하면,
    델파이가 좀 좋습니다..
    결과적으로는 모두 구현할 수 있는 방법이 있지만,
    델파이가 좀 쉽게 Handling할 수 있더군여..
    힘내세염..
    그럼.. 전  20000