如果这两个mdi子窗口不是一样的,直接用窗口的name去操作,我想不会有问题!!!!(同其它窗口一样操作)

解决方案 »

  1.   

    在子窗口1中的IMPLE……下加入:
    USES 子窗口2的UNIT文件
    在调用子窗口2中的控件
    如:s:=子窗口2.form2.edit1.text
      

  2.   

    两个子窗口的Name当然是一样的,而且现在不允许透过窗口的Caption来操作,现在要求就是获得窗口2的指针或句柄,到底怎么做????????
      

  3.   

    这两个子窗口的Caption应该不一样吧?查询主窗口的所有子窗口,找到符合2的Caption即可。
      

  4.   

    我知道是不一样,但现在我要求不能透过Caption来操作
      

  5.   

    那也好办,给所有的子窗口发消息,在子窗口接收函数里通过参数判断是不是自己要的不就得了?
    为什么不能通过Caption?就两个窗口,不麻烦啊。
      

  6.   

    在子窗体设置一个保存相关信息的属性,即可
    然后通过MDIChildCount和MDIChildren[i]来确定该窗体
      

  7.   

    //主窗口代码
    procedure TMain.N1Click(Sender: TObject);
    var
    P:TForm2;
    begin
    if(MdiChildCount>2) then
     begin
       MessageDlg('子窗口不能超过三个!',mtWarning,[mbOK],0);
       Exit;
       end;
    P:=TForm2.Create(Application);
    p.Tag:=j+1;
    p.Label1.Caption:=IntToStr(p.Tag);
    j:=j+1;
    p.Width:=400;
    p.Height:=400;
    p.Caption:='Windows'+IntToStr(J);
    p.show;end;procedure TMain.Control(i: integer);
    begin
    MdiChildren[i].BringToFront;
    end;
    end.
    procedure TForm2.FlatButton2Click(Sender: TObject);
    begin
    Main.Control(StrToInt(Edit1.Text));
    end;//mdi子窗口的代码//现在问题就是每次都不能准确的把我指定的窗口show出来,代码错在哪里了?
      

  8.   

    var
    P:TForm2;
    begin
    if(MdiChildCount>2) then
     begin
       MessageDlg('子窗口不能超过三个!',mtWarning,[mbOK],0);
       Exit;
       end;
    P:=TForm2.Create(Application);
    p.Tag:=j+1;
    p.Label1.Caption:=IntToStr(p.Tag);
    j:=j+1;
    p.Width:=400;
    p.Height:=400;
    p.Caption:='Windows'+IntToStr(J);
    p.show;
    end;procedure TMain.Control(i: integer);
    begin
    MdiChildren[i].BringToFront;
    end;
    end.
    //子窗口代码procedure TForm2.FlatButton2Click(Sender: TObject);
    begin
    Main.Control(StrToInt(Edit1.Text));
    end;//现在问题就是每次都不能准确的把我指定的窗口show出来,而且当我在子窗口的edit框里输入3的时候程序就会出错
      

  9.   

    当然啦!Control的顺序是变化的,不是一个固定的。而你当你输入3的时候,你需要找的第三个子窗口,可是你的这儿已经让子窗口数目小于3了!
    if(MdiChildCount>2) then
     begin
       MessageDlg('子窗口不能超过三个!',mtWarning,[mbOK],0);
       Exit;
       end;
      

  10.   

    1、你的程序有错误,MdiChildren[i].BringToFront;应该用i-1,索引是从0开始的。
    2、MdiChildren[index]不能保证索引对应窗口,也就是说你的mdiChildren[0]可能一会儿是windows1,一会儿是windows2.
      

  11.   

    1、错误,MdiChildren[i].BringToFront;应该是i-1.
    2.mdichildren的索引窗口方法不正确,mdichildren[0]可能一会儿是windows0一会儿是windows1,可能mdichildren是与窗口的z order有关的。
      

  12.   

    例如:form1属于unit1,form2属于unit2,用form1调用form2,请看一下程序
    unit unit1
    ……
    use ……,unit2;
    ……
    procedure TForm1.Button1Click(Sender: TObject);
    var
       Form2: TForm2;
    begin
       Form2:=TForm2.create(self);
       Form2.visible:=True; 
    end;
      

  13.   

    VSaber(☆浪人☆) :" mdichildren[0]可能一会儿是windows0一会儿是windows1",我就觉得是这样,不知为什么
      

  14.   

    举个例子吧,就好像我输入3这个参数,她就会在windows3和windows4这两个窗口中切换来切换去,总之不是一个确定的值,什么原因呢?以下代码我已经砍去,不用管他
    if(MdiChildCount>2) then
     begin
       MessageDlg('子窗口不能超过三个!',mtWarning,[mbOK],0);
       Exit;
       end;