是不是子窗体都需要在程序运行过程中动态创建?
在程序中动态创建的子窗体如何通过按钮时间去关闭它?就象正常窗体的Form1.close那样。
在程序中动态创建的子窗体如何通过按钮时间去关闭它?就象正常窗体的Form1.close那样。
解决方案 »
- 导入WEBSERVICE文件遇到的问题?
- 关于record清除数据的问题
- delphi 文本导入到sql 2000的问题
- 怎么将一个frame粘贴在 form里面啊?在Explorer里面怎么进行外码的设置?(不用SQL)
- 用ClientDataSet分批取数据维和无法NEXT下去?
- 求助:已经实现动态菜单,不知如何实现ActionList及toolbutton?请高人引路
- 函数返回值问题
- 关于发送E-MAIL的容易问题------
- 用delphi编写dos程序怎样使接收用户输入时的字符用字符'*'代替?
- Delphi xe 中开发Android软件作为客户端,通过socket编程与服务端连接
- 用过 DBGridEh控件请进入
- 请帮忙看一下问题出在哪里?
action := cafree;
Button.Click : 子窗体.close但是必需在子窗体的OnClose事件中加入
action := cafree;
在子窗体的CLOSE事件中:
ACTION:=CAFREE ;
F_child:=nil;
begin
判断是否已经打开了改窗口,没有的话 then
Application.CreateForm(Tform, form1);
Form1.Show;
end;关闭:
procedure Tform1.Button1Click(Sender: TObject);
begin
Close;
end;
procedure Tform1.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := caFree;
end;
if not assigned(form1) then
form1:=TForm1.craate(Application);
form1.show;
其余的都不要自动创建 可以自己定义创建下面是代码你可以先建立一个过程申明过程
procedure ShowMDIForm(FormClass: TFormClass; var frm;AOwner: TComponent); procedure Tfrmmain.ShowMDIForm(FormClass: TFormClass; var frm;AOwner: TComponent);
var
i: Integer;
bFound: Boolean;
NewForm: TForm;
begin
bFound:=False;
//NewForm:=Nil;
//查找该窗口是否已存在,如果存在就显示
For i:=0 to frmmain.MDIChildCount-1 do
begin
if MDIChildren[i].ClassName = FormClass.className then
begin
newForm:=MDIChildren[i];
Tform(frm):=newform;
newform.Show;
newform.WindowState:=wsMaximized;
self.Update;
bFound:=True;
Break;
end;
end;
//如果不存在,就重新创建
if Not bFound then
begin
newform:= TForm(FormClass.NewInstance);
TForm(frm):= newform;
newform.Create(Owner);
newform.Show;
newform.WindowState:=wsMaximized;
self.Update;
end;end;这个也可以在主窗体中创建 然后就在主窗体的按钮事件中添加如下代码procedure Tfrmmain.Button1Click(Sender: TObject);
begin
showMDIform(Tform1,form1,form1);
end;就可以啦上面的代码都是通过测试的
够详细吧
写入action := cafree;就ok啦
begin
if not assigned(c_form) then
begin
c_form:=TC_form.create(application);
c_form.show;
end;
end;
主要是为了判断该实例是否已经初始化过
在窗口的Close()里写
aciton:=caFree;
在窗口的Destroy里写
c_from:=nil;
这种写法是很常用的