说的明白一点,什么前一个后一个的。搞乱了。
能不能用MainForm、SubForm1、SubForm2之类的说清楚一点。最好有你的原代码。

解决方案 »

  1.   

    你应该在后一个子窗口uses后一个子窗口的unit
      

  2.   

    哇!错了!(是在不好意思)
      你应该在后一个子窗口uses前一个子窗口的unit 
      

  3.   

    主  题:关于MDI子窗口中变量冲突问题
    作  者:anotherbrick
    所属论坛:Delphi
    问题点数:20
    回复次数:3
    发表时间:2001-10-31 12:40:07
     
      
      我的程序是这样的: 
    首先是让用户在一个对话框opprDlg里选择一些参数,然后opprDlg对话框把这些参数 
    附值给MainForm主窗口的public的变量,接着打开SubForm子窗口,将MainForm主窗口的public 
    变量附值给SubForm子窗口的private的变量。 
    如果我再这样打开一个SubForm子窗口,后一个SubForm子窗口里的变量就会覆盖掉 
    前一个SubForm子窗口的变量,这样再对前一个SubForm子窗口做操作就会出错。也就是说SubForm子窗口被打开两次。
    请问各位高手怎么解决呢? 
    谢谢~  
      

  4.   

    问题
    1、你的代码放在什么地方
       如果在主窗口,显然子窗口的Private属性主窗口是无法访问的,程序根本无法运行
       所以代码应当是在子窗口的OnCreate或者是OnShow事件里面
    2、如果代码位于子窗口的这些事件中,是不应该出现上面的覆盖问题的!
    2、MDI应用中,主窗口的MDIChildren属性可以访问所有的子窗口,你是否是在用一个变量操作
       如TmpItem:=ListView.Items.Add之类来创建子窗口;这样才会出现后面创建的组件替代原
       组件的情况;为避免替代情况,应当用动态数组的方式来管理生成的变量
      

  5.   

    我刚才又试了试发现只有Tstringlist型的变量会冲突,代码如下:
    programForm为主窗口
    ctmstatDlg为对话框
    statForm为子窗口主窗口programForm:(主窗口中定义了public的变量pbcstr_year:Tstringlist和pbcstr_test:string)
    procedure Tprogramform.N2Click(Sender: TObject);
    begin
      ctmstatDlg:=TctmstatDlg.Create(Application);
      ctmstatDlg.ShowModal;
      if bStat then
      begin
        statForm:=TstatForm.Create(self);
        statForm.Show;
        ctmstatDlg.Free;
      end;
    end;对话框ctmstatDlg:
    先清空programForm.pbcStr_year
    把用户选择的多个参数放入programForm.pbcStr_year
    把用户填写的字符串放入programForm.pbcStr_test
    关闭自己子窗口statForm:(定义了private的变量pvtstr_year:Tstringlist和pvtstr_test:string)
    pvtstr_year:=programForm.pbcStr_year;
    pvtstr_test:=programForm.pbcStr_test;
    运行结果:
    打开statform两次发现前一个子窗口statForm中的pvtstr_year被后一个子窗口statForm中的
    pvtstr_year覆盖,而pvtstr_test却没有变。因此我想可能只有Tstringlist型的变量会冲突,
    怎样解决这个冲突呢?不知道我这次说清楚没有?