unit1
==
procedure TForm1.Button1Click(Sender: TObject);
begin
form2.Show;
form2.panel1.visible := False;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
form2.Show;
form2.panel1.visible := True;
==
unit2
==
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action := cafree;
form2 := nil;
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
form2.close;
end;
==
누군가 메모리 해제 시킬려면 cafree하고 nil을 꼭해야 한다고 해서 했구요
unit1에서 버튼1을 클릭하면 unit2의 panel이 보이고 버튼2를 클릭하면 panel이 보이질 않는 플을 테스트 해볼려고 했는데 액세스 바이올레이션 에러가 뜨네요.. 왜 그러죠 !! 초본지라 초보스런 질문을 햇군요..
아마 실행이 잘 될꺼에요
그런데 폼1에서 버튼을 눌렀을때는 에러 없이 폼2가 뜰꺼에요
그런데 폼2를 닫고 나서 다시 폼1의 버튼을 누르면 에러가 발생할겁니다.
프로그램을 작성할때 아무런 작업을 하지 않았다면...
님께서 만드신 폼은 이렇습니다.
1.폼1과 폼2를 만들었습니다.
2. 처음 프로그램이 실행될때는 폼1은 보이고 폼2는 보이지 않습니다.
3. 하지만 폼2도 보이지는 않지만 실행되어 떠있는 상태이지요
4. 그상태에서 폼1의 버튼을 눌러 폼2의 화면을 보여주길 원했기 때문에
폼2가 화면에 보이는 겁니다.
5. 그런데 폼2를 닫고 나서 다시 실행하면 이제는 진짜 폼2가 없는거지요
6. 그런데 폼1에서 다시 폼2를 보여달라고 하닌깐 폼2를 찾을 수가 없어서
액세스 바이올레이션 에러가 뜨는거구요..
7. 그래서 에러가 안 나게 억지로 만들며. 위에 분에 말씀하신데로 소스를
아래와 바꿔서 한번 해보십시오..(단 이렇게 하면 버튼을 누를때 마다 폼이
하나씩 생겨나지요)
8. 아래 예제는 억지로 에러를 없게 한거닌깐 참고만 하세요..
오늘도 즐코하시구요.. 화이팅입니다.
procedure TForm1.Button1Click(Sender: TObject);
var
form2 : Tform2;
begin
form2 := TForm2.Create(Self); <-- 폼2을 만든겁니다
form2.Show;
form2.panel1.visible := False;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
form2 : Tform2;
begin
form2 := TForm2.Create(Self);
form2.Show;
form2.panel1.visible := True;
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
close; <--- 요넘을 잘 봐주세요
end;