//子窗口显示
procedure ShowFM(FName: TForm);
begin
if assigned(FName) then
FName.Show
else
Application.CreateForm(TForm , FName);
end;
//调用
ShowFM(FUnit2);
怎么出不来呀?我用的是MDI,在判断里加上FName.Show,会新创建一个空窗体,而不是打开已经设计好的子窗体。
请高手指教。
procedure ShowFM(FName: TForm);
begin
if assigned(FName) then
FName.Show
else
Application.CreateForm(TForm , FName);
end;
//调用
ShowFM(FUnit2);
怎么出不来呀?我用的是MDI,在判断里加上FName.Show,会新创建一个空窗体,而不是打开已经设计好的子窗体。
请高手指教。
Form2:=nil;
关闭掉子窗体后,如果再打开,不是需要加一个 if assigned(FName) 吗?
为什么 Application.CreateForm(TForm , FName) 创建的不是我设计好的子窗体,而是一个空窗体呢?begin
if assigned(Form2) then
Form2.Show
else
Application.CreateForm(TForm2 , Form2);
end;
/////////////////////////////////////////////////////这样直接就能打开
是不是用的那个函数 de 参数有问题,发现不懂的地方太多了。请指教
begin
if assigned(Form2) then begin
Form2.Show ;
end
else begin
Application.CreateForm(TForm2 , Form2);
end;end;procedure TForm1.Button1Click(Sender: TObject);
begin
if assigned(Form2) then begin
Form2.Show;
end
else begin
Application.CreateForm(TForm2 , Form2);
end;
end;
begin
if assigned(Form2) then begin
Form2.Show ;
end
else begin
Application.CreateForm(TForm2 , Form2);
end;end;procedure TForm1.Button1Click(Sender: TObject);
begin
showfm(form2);
end;
procedure ShowFM(FName: TForm);
begin
if assigned(FName) then
FName.Show
else
begin
Application.CreateForm(TForm , FName);
FName.show;
end;
end;
//调用
ShowFM(FUnit2);
//子窗口显示
procedure ShowFM(FName: TForm);
begin
if not assigned(FName) then
Application.CreateForm(TForm , FName);
FName.show;
end;
//调用
ShowFM(FUnit2); 再不行的话,这样
procedure ShowFM(FName: TForm);
begin
if not assigned(FName) then
FName:=TForm.create(self);
FName.show;
end;
你的方法我试过了,只能打开Form2,
如果打开其它子窗体就要再写另外的procedure ShowFM(FName: TForm3); procedure ShowFM(FName: TForm4);
我是想 ShowFM(Form3); ShowFM(Form4);这样的使用ShowFM(窗体名称);这个函数。
procedure ShowFM(FName: TForm);
begin
if assigned(FName) then
FName.Show
else
Application.CreateForm(TForm , FName);
end;
当你的子窗体free并置nil后.assigned(FName)就为false了,然后你就将一个空白的窗体
tform创建的窗体赋给了fname,所以以后永远都是show也是show这个空白的tform的fname了.
谢谢,听你解释我好像懂了,不过我发现个新问题,照下面的代码procedure ShowFM(FName: TForm);
begin
if assigned(FName) then
FName.Show
else
Application.CreateForm(TForm , FName);
end; 现在知道FName 是空白窗体的原因了,可为什么新创建的FName 不会被 assigned(FName) 检测到,好像一直在else后面的创建操作,每次执行都要创建个新的Fname出来
assigned(FName) 不是识别窗体名称的吗?老问题还没搞懂,又出个新问题来 郁闷呀...高手请指教!
也就是说你永远也找不回来你的设计了内容的form了.