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"但我明明放了的呀.

解决方案 »

  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:[email protected]
      

  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."不和又错在那里了.