只有自己为创建的MDI子窗体编写函数了。

解决方案 »

  1.   

    可以用MDIChildren[]取得所有Child的,至于实例可以用:
    ( MainForm.MDIChildren[0] AS TMyMDIForm ).YourProperty ...
      

  2.   

    不好,如在运行时建立了两个TMyMDIForm,而对话框是被其中一个调用的怎么办?
      

  3.   

    你在对话框中定义一个 TMyMDIForm 类型的属性。
    假设为 property MDIFrm:TMyMDIForm read FMDIFrm write FMDIFrm;
    在对话框中就可以对这个属性进行操作就可以了。
     var MyMDIForm:TMyMDIForm;
     MyMDIForm:=TMyMDIForm.Create(self);
     DialogFrm.MDIFrm:=MyMDIForm;
      

  4.   

    要是知道变量名字是MyMDIForm那我就能对它下命令了,何必再设属性一向。
    问题是TMyMDIForm的实例是用TMyMDIForm.Create(self)生成的,无MyMDIForm。而且即使用
    MyMDIForm:=TMyMDIForm.Create(self)来建立实例,但是对话框有怎么知道呢,要知道对话框其实实在TMyMDIForm类的单元中被调用的。
    迷惑啊,迷惑????????
      

  5.   

    oldhawk(老鹰),别急,我来帮你搞定!
    其实 Apollo47(阿波罗)说的是有道理的。
    var MyMDIForm:TMyMDIForm;
    MyMDIForm:=TMyMDIForm.Create(self);
    DialogFrm.MDIFrm:=MyMDIForm; 
    你要想让你的对话框来调用 MyMdiForm,你总的把你的 
    MyMdiForm 的指针传递给MyMdiForm吧?
    那么只能是创建TMyMdiForm实例的时候,用指针指住,然后把这个指针创递给你的对话框,
    以便它调用。其实另外有个全局变量 Screen, 它有 CustomFormsCount, CustomForms,等属性,如果你的
    MyMdiForm可以通过某个属性唯一区别于的其他的TMyMdiForm的实例的话,就可以通过
    遍历 Screen.Forms来找到它,而不需要再用指针指住它。
      

  6.   

    修正:
    “你要想让你的对话框来调用 MyMdiForm,你总的把你的 
    MyMdiForm 的指针传递给MyMdiForm吧?”
    ==〉你要想让你的对话框来调用 MyMdiForm,你总的把你的 
    MyMdiForm 的指针传递给对话框吧?
      

  7.   

    首先感谢!
    其实我以试过指针的方法,受APOLLO的启发,我在对话框中加入一个handle属性保存调用它的
    MyMDIForm的句柄,并且遍历mainform.mdichildren找到与此句柄匹配的子窗体。但是找到后用MdiChildren[i]为变量名称操纵这个窗体,总会得到出错信息“Aceess Error”。另外还试过一种方法,就是遍历所有子窗体找到是“is TMyMdiForm”(这样做有缺陷其实),但即使这样,用TMyMDiForm(mdichildren[i].handle)为变量名称操纵这个窗体时也出现“Aceess Error”。难那!现在的问题集中在,当知道某个窗体的句柄Handle时,怎样得到它的变量名从而向它下命令,如:FromHandleToVarName(handle).dosomething
      

  8.   

    简单说就是怎样操作一个用“TMyMDIForm.Create(self)”产生的窗体。
      

  9.   

    你的对话框是如何调用的?
    什么时候创建的?
    最后给你的代码来看看
    如果你是在这个
    TMyMDIForm中调用你的对话框的话:
    而如果你的对话框在TMyMDIForm中这样调用的话:
    with TMyDialogForm.Create(Self) do
    try
      //注:这样的话,如下写法
      Self.Parent.SomeProc; //就可以调用你所谓没有实例的TMyMDIForm了
      ShowModal;
    finally
      Free;
    end;如果你的对话框不是这么写的话,我就迷惑你的程序到底要做什么了。。
      

  10.   

    事实上,对话框产生的方法和你不一样,用var MyDialog.Show,所以它的Parent不是MyMDIForm。