请教关于MDI和SDIform间传值的问题?

vigrous_chen 2002-12-17 08:50:36
有两个form,分别是MainForm,childForm,
在SDI方式下可以通过以下的方式对ChildForm传值(childform的public下定义有str:string的参数)
SDI:
childform:=Tchildform.create(Application);
childform.str:='ABC';
childform.ShowModal;
childform.free;
但是在MDI的方式就不行了,请问在MDI的方式如何实现form间传值的问题
MDI:
childform:=Tchildform.Create(Application);
childform.str:='ABC'
...全文
34 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bigysw 2002-12-17
  • 打赏
  • 举报
回复
没有调试过,自己看看吧
bigysw 2002-12-17
  • 打赏
  • 举报
回复
public
FormList:TStringList;
.......

procedure TMDIFormCreate(Owner:TObject); //初始化FormList;
begin
FormList:=TStringList.Create;
end;

procedure TMDIFormClose(Owner:TObject); //释放没有关闭的窗体;
var
i:integer;
begin
for i:=0 to FormList.Count-1 do
TChildForm(FormList.Objects[i]).Free;
FormList.Clear;
FormList.Free;
end;

procedure TMDIForm.Menu1Click(Sender:TObject);//创建新窗口,并且给新的子窗口赋值
begin
childform:=Tchildform.Create(Application);
childform.str:='ABC';
FormList.AddObject(ChildForm.Str,ChildForm);
end;

function TMDIForm.FindForm(Str:String):integer;//根据变量值查找窗口,这个Str可以用另外变量的代替,因为可能不唯一,思路类似
var
i:integer;
begin
FormList.Find(Str,i);
result:=i;
end;

procedure SetChildParam(OldStr,NewStr:String);//根据OldStr查找并且给某一个窗口赋值
var
i:integer;
begin
i:=FindForm(OldStr);
if i>=0 then
TChildForm(FormList.Objects[i]).Str:=NewStr;
end;

------------------------------------------------------------------------

在子窗口段中,

Procedure TChildFormClose(Sender:TOnject);//释放该窗口和MDI的List资源
begin
ca:=Free;
MDIForm.FormList.delete(MDIForm.FindForm(Str)).
end;
vigrous_chen 2002-12-17
  • 打赏
  • 举报
回复
谢谢bigysw,你能说的详细些吗?
bigysw 2002-12-17
  • 打赏
  • 举报
回复
MDI:
childform:=Tchildform.Create(Application);
childform.str:='ABC'


这样做也是可以的,即使childform是一个全程变量,第一步创建窗口的时候,该变量已经指向了最新一次创建的窗口实例,以前创建的(如果有的话)实例里面的内容不会有丝毫的变化,不过你这时候已经不能再给以前的窗口实例传送参数了。

如果要想继续给以前创建的窗口传送参数,就是用保存实例的数组或者TList容器实现。
vigrous_chen 2002-12-17
  • 打赏
  • 举报
回复
再次谢谢 bigysw!!

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧