请各位兄弟帮我看年吧.我不知错在那里了.

时间:2023-02-03 11:53:22
implementation
USES UNIT2,UNIT3,UNIT4,UNIT5,UNIT6,UNIT7,unit8,UNIT9;
VAR
A:TFrame2;
B:TFRAME3;
C:TFRAME4;
D:TFRAME5;
E:TFRAME6;
F:TFRAME7;
g:TFRAME8;
H:TFRAME9;

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
IF ASSIGNED(a) THEN a.FREE
ELSE
IF ASSIGNED(b) THEN b.FREE;
B:=TFRAME3.CREATE(SELF);
B.Parent:=PANEL2;
B.Align:=ALCLIENT;
B.SHOW;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
 IF ASSIGNED(A) THEN A.Free
ELSE
IF ASSIGNED(B) THEN B.Free;
A:=TFRAME2.Create(SELF);
A.Parent:=PANEL2;
A.Align:=ALCLIENT;
A.SHOW;
end;

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
 if assigned(a) then a.Free
else
if assigned(c) then c.Free;
c:=tframe4.Create(self);
c.Parent:=panel2;
c.Align:=alclient;
c.Show;
end;

procedure TForm1.BitBtn4Click(Sender: TObject);
begin
if assigned(a) then a.Free
else
if assigned(d) then d.Free;
d:=tframe5.Create(self);
d.Parent:=panel2;
d.Align:=alclient;
d.Show;

end;

procedure TForm1.BitBtn5Click(Sender: TObject);
begin
if assigned(a) then a.Free
else
if assigned(e) then e.Free;
e:=tframe6.Create(self);
e.Parent:=panel2;
e.Align:=alclient;
e.show;

end;

procedure TForm1.BitBtn6Click(Sender: TObject);
begin
if assigned(a) then a.Free
else
if assigned(f) then f.Free;
f:=tframe7.Create(self);
f.Parent:=panel2;
f.Align:=alclient;
f.show;
end;



procedure TForm1.BitBtn7Click(Sender: TObject);
begin
if assigned(a) then a.Free
else
if assigned(g) then g.Free;
g:=tframe8.Create(self);
g.Parent:=panel2;
g.Align:=alclient;
g.Show;
end;

procedure TForm1.BitBtn8Click(Sender: TObject);
begin
if assigned(a) then a.Free
else
if assigned(h) then h.Free;
H:=tframe9.Create(self);
H.Parent:=panel2;
H.Align:=alclient;
H.Show;
end;
上面是我做的一个窗体切换介面.共有八个按钮,重复点击TFRAME4里就提示" A COMPONENT NAMED FRAME4 ALREADY EXISTS"但我明明放了的呀.

4 个解决方案

#1


这是因为你已经创建了一个TFrame4的这个Frame了...
页面切换不用你这么麻烦吧...
var
  Frame: array [1..9] of TFrame;  //九个Frame
  PublicFrame: TFrame;
begin
  Frame[1] := TFrame1.Create(Self); //这样就是创建了TFrame1这个Frame了...
  Frame[2] := TFrame2.Create(Self); //这样就是创建了TFrame2这个Frame了...

  PublicFrame := Frame[1];  //把最新创建的Frame指针保存...在创建新的Frame之前释放这个frame就行了...就不有这么麻烦...
 //在就是不用九个按钮都写代码,一个就行了。。。而且简单明了...
end;
  

#2


那位大哥可以做一个例子给我吗?谢谢了EMAIL:97W57@163.COM

#3


在创建窗体的时候先将原来窗体释放掉

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
B:=nil;
IF ASSIGNED(a) THEN a.FREE
ELSE
IF ASSIGNED(b) THEN b.FREE;
B:=TFRAME3.CREATE(SELF);
B.Parent:=PANEL2;
B.Align:=ALCLIENT;
B.SHOW;
end;

#4


我按"XXXXXXXX(黄金左脚) ( ) "的方法将窗体放掉,运行时又提示"ACCESS Violation at address 000001de.read of address 000001de."不和又错在那里了.

#1


这是因为你已经创建了一个TFrame4的这个Frame了...
页面切换不用你这么麻烦吧...
var
  Frame: array [1..9] of TFrame;  //九个Frame
  PublicFrame: TFrame;
begin
  Frame[1] := TFrame1.Create(Self); //这样就是创建了TFrame1这个Frame了...
  Frame[2] := TFrame2.Create(Self); //这样就是创建了TFrame2这个Frame了...

  PublicFrame := Frame[1];  //把最新创建的Frame指针保存...在创建新的Frame之前释放这个frame就行了...就不有这么麻烦...
 //在就是不用九个按钮都写代码,一个就行了。。。而且简单明了...
end;
  

#2


那位大哥可以做一个例子给我吗?谢谢了EMAIL:97W57@163.COM

#3


在创建窗体的时候先将原来窗体释放掉

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
B:=nil;
IF ASSIGNED(a) THEN a.FREE
ELSE
IF ASSIGNED(b) THEN b.FREE;
B:=TFRAME3.CREATE(SELF);
B.Parent:=PANEL2;
B.Align:=ALCLIENT;
B.SHOW;
end;

#4


我按"XXXXXXXX(黄金左脚) ( ) "的方法将窗体放掉,运行时又提示"ACCESS Violation at address 000001de.read of address 000001de."不和又错在那里了.