如何让子窗体可见,点击一个按钮,出现一个子窗体,关闭上一个子窗体??急!!!(20分)

  • 主题发起人 主题发起人 晓茜
  • 开始时间 开始时间

晓茜

Unregistered / Unconfirmed
GUEST, unregistred user!
如何让子窗体可见,点击一个按钮,出现一个子窗体,关闭上一个子窗体??急!!!
 
将子窗体的Visible属性设为True。
要实现“点击一个按钮,出现一个子窗体,关闭上一个子窗体”的功能,只须在调用某个窗体时才创建该窗体,同时上一个窗体会先关闭。
如在按钮的Onclick事件中加入:
form1:=tform1.create(self);
form1.showmodal;
关闭时会自动释放。

 

按钮是在主窗体上还是子窗体上?
show显示,close关闭。
 
不行啊,我是继承了一个窗体,用的是panel 在panel 显示窗体!
 
关闭上一个子窗体
窗体名称.close
点击一个按钮,出现一个子窗体
窗体名称.show
至于关闭的是哪个,只要一个全局变量标记一下不就行了


 

//看看下面代码,显示部份与关闭部份分开了。

uses
unit2;

procedure TForm1.Button1Click(Sender: TObject);
var
form2: TForm2;//子窗体
begin
if Panel1.FindChildControl('Form2') <> nil then
exit;
form2 := TForm2.Create(self);
form2.Parent := Panel1;
form2.Show;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
cnl: TControl;
begin
cnl := Panel1.FindChildControl('Form2');
if cnl <> nil then
FreeAndNil(cnl);
end;
 
帮改一下“影子”的代码,减少系统资源的开销:
uses
unit2;

procedure TForm1.Button1Click(Sender: TObject);
var
form2: TForm2;//子窗体
begin
if Panel1.FindChildControl('Form2') <> nil then
exit;
if not Assigned(Form2) then
form2 := TForm2.Create(self);
try
form2.Parent := Panel1;
form2.Show;
finally
Form2 := nil ; //最好是在 Form2的Destory事件里写
end ;
end;
 
TO:glassesboy
讨论一下。

if Panel1.FindChildControl('Form2') <> nil then
这时需要关闭窗体,而非退出。

if not Assigned(Form2) then
form2是局部变量,这起不到作用。

Form2 := nil
有没有这句没什么影响。

附:要注释project中的
// Application.CreateForm(TForm2, Form2);
 
一般来说是不行的,因为你用的事件是上个窗体的,
而又关掉它,
所以要有先后顺序!
要先show出子窗再关主窗!
或者用hide
和show.
 

TO:luky_99
呵呵,可以使用消息
 
Form1.Free;
Form2:= Tform2.create(nil);
 
后退
顶部