说的明白一点,什么前一个后一个的。搞乱了。
能不能用MainForm、SubForm1、SubForm2之类的说清楚一点。最好有你的原代码。
能不能用MainForm、SubForm1、SubForm2之类的说清楚一点。最好有你的原代码。
解决方案 »
- 关于adobe的acropdf.dll的使用问题
- 如何改良dbgrideh的文字过滤
- 哪位前辈能给个TThreadlist的小例子呢?谢谢!
- 动态设置FastReport的上边距、下边距、左右边距,我用的FastReport 4.
- 我的想法是,用timer控件,做一个倒计10秒的程序,在label的caption中显示倒数10秒的过程,10秒过后运行一个本地EXE文件,可惜,俺不懂如
- 简单问题,帮帮忙啊,在线等...
- 一简单问题求助
- TreeView的使用!在线等!
- 蔡鸟问:用delphi怎么实现与,或,模糊查找等功能?
- 求助:关于Format函数的用法
- 这里有人回答VB的问题吗?
- 求一个字符窜从第i个位置起的子窜的函数是什么?
你应该在后一个子窗口uses前一个子窗口的unit
作 者:anotherbrick
所属论坛:Delphi
问题点数:20
回复次数:3
发表时间:2001-10-31 12:40:07
我的程序是这样的:
首先是让用户在一个对话框opprDlg里选择一些参数,然后opprDlg对话框把这些参数
附值给MainForm主窗口的public的变量,接着打开SubForm子窗口,将MainForm主窗口的public
变量附值给SubForm子窗口的private的变量。
如果我再这样打开一个SubForm子窗口,后一个SubForm子窗口里的变量就会覆盖掉
前一个SubForm子窗口的变量,这样再对前一个SubForm子窗口做操作就会出错。也就是说SubForm子窗口被打开两次。
请问各位高手怎么解决呢?
谢谢~
1、你的代码放在什么地方
如果在主窗口,显然子窗口的Private属性主窗口是无法访问的,程序根本无法运行
所以代码应当是在子窗口的OnCreate或者是OnShow事件里面
2、如果代码位于子窗口的这些事件中,是不应该出现上面的覆盖问题的!
2、MDI应用中,主窗口的MDIChildren属性可以访问所有的子窗口,你是否是在用一个变量操作
如TmpItem:=ListView.Items.Add之类来创建子窗口;这样才会出现后面创建的组件替代原
组件的情况;为避免替代情况,应当用动态数组的方式来管理生成的变量
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型的变量会冲突,
怎样解决这个冲突呢?不知道我这次说清楚没有?