窗体和对话框的通信问题? 只有自己为创建的MDI子窗体编写函数了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以用MDIChildren[]取得所有Child的,至于实例可以用:( MainForm.MDIChildren[0] AS TMyMDIForm ).YourProperty ... 不好,如在运行时建立了两个TMyMDIForm,而对话框是被其中一个调用的怎么办? 你在对话框中定义一个 TMyMDIForm 类型的属性。假设为 property MDIFrm:TMyMDIForm read FMDIFrm write FMDIFrm;在对话框中就可以对这个属性进行操作就可以了。 var MyMDIForm:TMyMDIForm; MyMDIForm:=TMyMDIForm.Create(self); DialogFrm.MDIFrm:=MyMDIForm; 要是知道变量名字是MyMDIForm那我就能对它下命令了,何必再设属性一向。问题是TMyMDIForm的实例是用TMyMDIForm.Create(self)生成的,无MyMDIForm。而且即使用MyMDIForm:=TMyMDIForm.Create(self)来建立实例,但是对话框有怎么知道呢,要知道对话框其实实在TMyMDIForm类的单元中被调用的。迷惑啊,迷惑???????? oldhawk(老鹰),别急,我来帮你搞定!其实 Apollo47(阿波罗)说的是有道理的。var MyMDIForm:TMyMDIForm;MyMDIForm:=TMyMDIForm.Create(self);DialogFrm.MDIFrm:=MyMDIForm; 你要想让你的对话框来调用 MyMdiForm,你总的把你的 MyMdiForm 的指针传递给MyMdiForm吧?那么只能是创建TMyMdiForm实例的时候,用指针指住,然后把这个指针创递给你的对话框,以便它调用。其实另外有个全局变量 Screen, 它有 CustomFormsCount, CustomForms,等属性,如果你的MyMdiForm可以通过某个属性唯一区别于的其他的TMyMdiForm的实例的话,就可以通过遍历 Screen.Forms来找到它,而不需要再用指针指住它。 修正:“你要想让你的对话框来调用 MyMdiForm,你总的把你的 MyMdiForm 的指针传递给MyMdiForm吧?”==〉你要想让你的对话框来调用 MyMdiForm,你总的把你的 MyMdiForm 的指针传递给对话框吧? 首先感谢!其实我以试过指针的方法,受APOLLO的启发,我在对话框中加入一个handle属性保存调用它的MyMDIForm的句柄,并且遍历mainform.mdichildren找到与此句柄匹配的子窗体。但是找到后用MdiChildren[i]为变量名称操纵这个窗体,总会得到出错信息“Aceess Error”。另外还试过一种方法,就是遍历所有子窗体找到是“is TMyMdiForm”(这样做有缺陷其实),但即使这样,用TMyMDiForm(mdichildren[i].handle)为变量名称操纵这个窗体时也出现“Aceess Error”。难那!现在的问题集中在,当知道某个窗体的句柄Handle时,怎样得到它的变量名从而向它下命令,如:FromHandleToVarName(handle).dosomething 简单说就是怎样操作一个用“TMyMDIForm.Create(self)”产生的窗体。 你的对话框是如何调用的?什么时候创建的?最后给你的代码来看看如果你是在这个TMyMDIForm中调用你的对话框的话:而如果你的对话框在TMyMDIForm中这样调用的话:with TMyDialogForm.Create(Self) dotry //注:这样的话,如下写法 Self.Parent.SomeProc; //就可以调用你所谓没有实例的TMyMDIForm了 ShowModal;finally Free;end;如果你的对话框不是这么写的话,我就迷惑你的程序到底要做什么了。。 事实上,对话框产生的方法和你不一样,用var MyDialog.Show,所以它的Parent不是MyMDIForm。 怎样把单机版用access的软件改成局域网版? delphi读取.db文件里的一个blob字段 关于存储过程的参数初始化问题!请各位指点一下!谢谢! 终于买到了车票回去过年了,虽然是一张黄牛票!!放分 怎样调用HLP文件的搜索功能 help me 如何用delphi6控制excel?急啊~~~~~~~~~~! 如何将Delphi做的程序放到控制面板中,就象BDE Administrator一样? unable to open file 'spcomm.lib' Creport V4 打印设置问题 主从表的问题: 如何使用TThreed进行多线程编程
( MainForm.MDIChildren[0] AS TMyMDIForm ).YourProperty ...
假设为 property MDIFrm:TMyMDIForm read FMDIFrm write FMDIFrm;
在对话框中就可以对这个属性进行操作就可以了。
var MyMDIForm:TMyMDIForm;
MyMDIForm:=TMyMDIForm.Create(self);
DialogFrm.MDIFrm:=MyMDIForm;
问题是TMyMDIForm的实例是用TMyMDIForm.Create(self)生成的,无MyMDIForm。而且即使用
MyMDIForm:=TMyMDIForm.Create(self)来建立实例,但是对话框有怎么知道呢,要知道对话框其实实在TMyMDIForm类的单元中被调用的。
迷惑啊,迷惑????????
其实 Apollo47(阿波罗)说的是有道理的。
var MyMDIForm:TMyMDIForm;
MyMDIForm:=TMyMDIForm.Create(self);
DialogFrm.MDIFrm:=MyMDIForm;
你要想让你的对话框来调用 MyMdiForm,你总的把你的
MyMdiForm 的指针传递给MyMdiForm吧?
那么只能是创建TMyMdiForm实例的时候,用指针指住,然后把这个指针创递给你的对话框,
以便它调用。其实另外有个全局变量 Screen, 它有 CustomFormsCount, CustomForms,等属性,如果你的
MyMdiForm可以通过某个属性唯一区别于的其他的TMyMdiForm的实例的话,就可以通过
遍历 Screen.Forms来找到它,而不需要再用指针指住它。
“你要想让你的对话框来调用 MyMdiForm,你总的把你的
MyMdiForm 的指针传递给MyMdiForm吧?”
==〉你要想让你的对话框来调用 MyMdiForm,你总的把你的
MyMdiForm 的指针传递给对话框吧?
其实我以试过指针的方法,受APOLLO的启发,我在对话框中加入一个handle属性保存调用它的
MyMDIForm的句柄,并且遍历mainform.mdichildren找到与此句柄匹配的子窗体。但是找到后用MdiChildren[i]为变量名称操纵这个窗体,总会得到出错信息“Aceess Error”。另外还试过一种方法,就是遍历所有子窗体找到是“is TMyMdiForm”(这样做有缺陷其实),但即使这样,用TMyMDiForm(mdichildren[i].handle)为变量名称操纵这个窗体时也出现“Aceess Error”。难那!现在的问题集中在,当知道某个窗体的句柄Handle时,怎样得到它的变量名从而向它下命令,如:FromHandleToVarName(handle).dosomething
什么时候创建的?
最后给你的代码来看看
如果你是在这个
TMyMDIForm中调用你的对话框的话:
而如果你的对话框在TMyMDIForm中这样调用的话:
with TMyDialogForm.Create(Self) do
try
//注:这样的话,如下写法
Self.Parent.SomeProc; //就可以调用你所谓没有实例的TMyMDIForm了
ShowModal;
finally
Free;
end;如果你的对话框不是这么写的话,我就迷惑你的程序到底要做什么了。。