Q&A

  • 부모 폼과 자식 폼의 변수값 전달
안녕들 하세요...



처음에는 쉬워 보이던데 막상 하니까 생각보다 까다롭더군요...



회원관리 프로그램을 작성 할려구요.



1. Main폼에서 회원관리를 선택하면 Modal폼이 뜨면서 StringGrid에 회원에 관한 정보를

뛰우게 하였습니다. 그다음에는 회원정보를 수정하기 위해 수정하려는 회원의 Row를

더블클릭해서 새로운 Modal폼을 뛰운다음 Edit 박스에 선택된 회원의 Data들이 나타나게

해서 수정하려고 하는데... 폼사이의 변수 전달이 생각보다 안되서요.



2. 위에서 나타난 수정하려는 두번째 폼에서 우편번호 옆에 스피드 버튼을 두어서 우편번호

검색창이 Modal폼으로 나타나게 했습니다. 그런다음 원하는 주소 및 우편번호를 검색해서

해당 Row를 클릭하면 회원정보 수정창에 자동으로 들어가게 하려는데 이것 역시 잘 안되네요



소스는 다음과 같이 해보았거든요



첫번째 회원정보가 나타나는 폼 : UserManager

두번째 회원 개개인의 정보가 나타나는 폼 : UserInfo

세번째 우편번호 검색폼 : Zip



1.

procedure TUserManager.GridDblClick(Sender: TObject);

begin

with TUserInfo.Create(self) do begin

try

if UserManager.Grid.Cells[0, 1] <> '' then

UserInfo.Edit1.Text :=

UserManager.Grid.Cells[0, Usermanager.Grid.Row];

ShowModal;

finally

Free;

end;

end;

end;



이렇게 하니까... 엑세스 바이올래이션 에러가 나서요.



2.

procedure TZip.GridClick(Sender: TObject);

begin

With Zip.Grid do

if Cells[0, 1] <> '' then begin

UserInfo.Edit10.Text := Copy(Trim(Cells[0, Row]), 1, 3);

UserInfo.Edit17.Text := Copy(Trim(Cells[0, Row]), 4, 3);

UserInfo.Edit11.Text := Cells[1, Row];

end;

spExit.OnClick(nil);

end;



이런게 해서 선택된 Row를 Edit 박스에 넣으려고 해도 마찬가지로 엑세스 바이올래이션

Error가 발생하네요...



도와 수세요... 그럼 이만.



2  COMMENTS
  • Profile
    박권섭 2000.05.17 05:16
    Paddy wrote:

    > 안녕들 하세요...

    >

    > 처음에는 쉬워 보이던데 막상 하니까 생각보다 까다롭더군요...

    >

    > 회원관리 프로그램을 작성 할려구요.

    >

    > 1. Main폼에서 회원관리를 선택하면 Modal폼이 뜨면서 StringGrid에 회원에 관한 정보를

    > 뛰우게 하였습니다. 그다음에는 회원정보를 수정하기 위해 수정하려는 회원의 Row를

    > 더블클릭해서 새로운 Modal폼을 뛰운다음 Edit 박스에 선택된 회원의 Data들이 나타나게

    > 해서 수정하려고 하는데... 폼사이의 변수 전달이 생각보다 안되서요.

    >

    > 2. 위에서 나타난 수정하려는 두번째 폼에서 우편번호 옆에 스피드 버튼을 두어서 우편번호

    > 검색창이 Modal폼으로 나타나게 했습니다. 그런다음 원하는 주소 및 우편번호를 검색해서

    > 해당 Row를 클릭하면 회원정보 수정창에 자동으로 들어가게 하려는데 이것 역시 잘 안되네요

    >

    > 소스는 다음과 같이 해보았거든요

    >

    > 첫번째 회원정보가 나타나는 폼 : UserManager

    > 두번째 회원 개개인의 정보가 나타나는 폼 : UserInfo

    > 세번째 우편번호 검색폼 : Zip

    >

    > 1.

    > procedure TUserManager.GridDblClick(Sender: TObject);

    > begin

    > with TUserInfo.Create(self) do begin

    > try

    > if UserManager.Grid.Cells[0, 1] <> '' then

    > UserInfo.Edit1.Text :=

    > UserManager.Grid.Cells[0, Usermanager.Grid.Row];

    > ShowModal;

    > finally

    > Free;

    > end;

    > end;

    > end;

    >

    > 이렇게 하니까... 엑세스 바이올래이션 에러가 나서요.

    >



    procedure TUserManager.GridDblClick(Sender: TObject);

    begin

    UserInfo := TUserInfo.Create(self) ;

    try

    if UserManager.Grid.Cells[0, 1] <> '' then

    UserInfo.Edit1.Text := UserManager.Grid.Cells[0, Usermanager.Grid.Row];

    UserInfo.ShowModal;

    finally

    UserInfo.Free;

    end;

    end;



    와 같이 Modal 폼의 생성 부분을 분리하셔야 하겠습니다.

    ( 혹시나 ??? Uses 란에 UserManager 가 적혀 있어야 합니다. )



  • Profile
    최용일 2000.03.22 05:33
    서브폼을 생성하는 부분이 잘못된 것 같군요. 이 부분만 해결되면 되겠는

    데요...



    |procedure TUserManager.GridDblClick(Sender: TObject);

    |begin

    | UserInfo := TUserInfo.Create(self); <=======

    | try

    | if UserManager.Grid.Cells[0, 1] <> '' then

    | UserInfo.Edit1.Text :=

    | UserManager.Grid.Cells[0, Usermanager.Grid.Row];

    | ...

    |





    > procedure TUserManager.GridDblClick(Sender: TObject);

    > begin

    > with TUserInfo.Create(self) do begin <=================

    > try

    > if UserManager.Grid.Cells[0, 1] <> '' then

    > UserInfo.Edit1.Text :=

    > UserManager.Grid.Cells[0, Usermanager.Grid.Row];

    > ShowModal;

    > finally

    > Free;

    > end;

    > end;

    > end;

    >