Q&A

  • 폼에서 값받아오기

Form1에서 Form2를 부릅니다.

Form2는 버튼이 여러개 있고 여기서 수치를 입력합니다.
수치를 보여주는 label이 있고요.
Form1의 ok버튼을 누르면 Form1으로 가서 해당 값을 저장합니다.

문제는 이게 되었다가 안되었다가 합니다. 디버깅을 하면...
Form2에서 수치 입력은 제대로 되는데...Result로 값이 안넘어가요.
도와주세요.

1) Form1의 label1.click을 수행...showmodal로 리턴받을 준비.
2) Form2가 보여지고 여기서 수치 버튼을 클릭하면...mrOK를 넘겨줍니다.
3) 리턴받은것이 mrOK이면 수치를 label의 caption을로 만듭니다.
3  COMMENTS
  • Profile
    박상기 2002.09.23 23:54
    수치버튼클릭시

    close;
    modalresult := mrok;

    해보세요.


  • Profile
    고지범 2002.09.20 00:54
    델파이 객체와 윈도우 객체를 분리해서 생각하심 간단합니다....

    TForm2 선언 부분...
      TForm2 = class(TForm)
        Button1: TButton;
        edtData: TEdit;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        MyStr   :string; // --> 밖에서 필요한 데이터를 가지구 있다고 하고...
      end;

    procedure TForm1.Button5Click(Sender: TObject);
    begin
       with TForm2.Create(nil) do begin
          try
             if mrOk = ShowModal() then begin    // --> 1)
                ShowMessage(edtData.Text + MyStr);  // --> 2)
                // edtData는 TForm2 꺼 겠죠?...
             end;
          finally
             Free;  // --> 3)
          end;
       end;
    end;
    위의 프로시져를 보면 1)이 실행되는 동안, 즉, ShowModal 이 실행되는
    동안에 윈도우 객체가 있죠. 해당하는 델파이 객체는 3)까지 살아남아
    있습니다.(창-Window-이 있느냐 하는 말이죠....)
    따라서 필요한 데이터가 TForm2 에 만들어져 있다면, 혹은 TForm2에 있는
    컨트롤에 필요한 데이터가 있다면 2) 에서 처럼 가져오면 됩니다.

    오늘도 즐입다...^^

  • Profile
    정성훈 2002.09.20 00:40
    안녕하세요
    mrOK, NO 말고 전역변수 하나 두어서 해보세요..
    같은 방법이지만  참고하세요.

       with Q_PJCode_Info do
       begin
          try
             F_Choice_Code := TF_Choice_Code.Create( Application );
             if Q_PJCode_InfoCONTACT.AsString = 'Y' then P_Choice_Code.sCDID := '52'
             else P_Choice_Code.sCDID := '53';
             F_Choice_Code.ShowModal;

             if P_Choice_Code.bChoice then
             begin
                Q_PJCode_Info.Edit;
                Q_PJCode_Info.FieldByName( 'STATUS' ).AsString      := P_Choice_Code.sChoice_Code;
                Q_PJCode_Info.FieldByName( 'STATUS_NAME' ).AsString := P_Choice_Code.sChoice_Name;
             end;
          finally
             F_Choice_Code.Free;
          end;
       end;