G gfxwst Unregistered / Unconfirmed GUEST, unregistred user! 2007-01-10 #1 全局变量在主窗口,主窗口已引用子窗口,要从子窗口赋值,怎么办?
Z zhuangqr Unregistered / Unconfirmed GUEST, unregistred user! 2007-01-10 #2 with ChildForm := TForm.Create do Somevalue := Globalvalue //把全局变量赋给子窗体中的变量Somevalue
3 3868474 Unregistered / Unconfirmed GUEST, unregistred user! 2007-01-10 #3 应该反过来, 子窗口引用主窗口, 子窗口就可以对主窗口的全局变量赋值了
D duhai_lee Unregistered / Unconfirmed GUEST, unregistred user! 2007-01-10 #4 这样就是循环引用了, 最好把全局变量发在一个公共单元, 这样让主,子单元引用公共单元。 建议: 少用,慎用全局变量, 不要循环引用。
3 3868474 Unregistered / Unconfirmed GUEST, unregistred user! 2007-01-10 #5 to duhai_lee: 如何避免对窗体的循环引用呢. 如: 主窗体要打开子窗体, 当然要引用子窗体. 如果子窗体要使用主窗体, 或执行主窗体的过程, 必然造成循环引用. 这时候如何避免呢?
Z zhuangqr Unregistered / Unconfirmed GUEST, unregistred user! 2007-01-10 #6 应当就事论事 lz既然这样做一定有他的理由, 如果子窗体也需要引用主窗体的话,为了避免循环引用,可以把一个uses 的引用放在interface 处,而另一个uses的引用放在implementation处
应当就事论事 lz既然这样做一定有他的理由, 如果子窗体也需要引用主窗体的话,为了避免循环引用,可以把一个uses 的引用放在interface 处,而另一个uses的引用放在implementation处
F fjw Unregistered / Unconfirmed GUEST, unregistred user! 2007-01-10 #7 如果真的不想循环引用,更不想用一个公用单元来解决,用事件机制可以达到楼主的要求 MainForm中定义一个方法 procedure TMainForm.SetValue(iValue: integer); begin MainForm.全局变量:= iValue; end; ChildForm中这样定义 type TEvent_SetValue=procedure(iValue: integer) of object; property OnSetValue: TEvent_SetValue read FOnSetValue write FOnSetValue; 赋值操作时需要执行 Self.OnSetValue(新的值); MainForm调用ChildForm时需要 ChildForm.OnSetValue:= MainForm.SetValue;
如果真的不想循环引用,更不想用一个公用单元来解决,用事件机制可以达到楼主的要求 MainForm中定义一个方法 procedure TMainForm.SetValue(iValue: integer); begin MainForm.全局变量:= iValue; end; ChildForm中这样定义 type TEvent_SetValue=procedure(iValue: integer) of object; property OnSetValue: TEvent_SetValue read FOnSetValue write FOnSetValue; 赋值操作时需要执行 Self.OnSetValue(新的值); MainForm调用ChildForm时需要 ChildForm.OnSetValue:= MainForm.SetValue;
3 3868474 Unregistered / Unconfirmed GUEST, unregistred user! 2007-01-11 #8 to fjw 你写的情况也一样会发生循环引用, 大多数情况下, 子窗口的打开首先就会要主窗体引用子窗体, ChildForm.OnSetValue:= MainForm.SetValue这句话又发生了子窗体引用了主窗体. 平时有循环引用时好象也没出什么问题. 那么, 循环引用到底有什么后果呢?
to fjw 你写的情况也一样会发生循环引用, 大多数情况下, 子窗口的打开首先就会要主窗体引用子窗体, ChildForm.OnSetValue:= MainForm.SetValue这句话又发生了子窗体引用了主窗体. 平时有循环引用时好象也没出什么问题. 那么, 循环引用到底有什么后果呢?
G gfxwst Unregistered / Unconfirmed GUEST, unregistred user! 2007-01-11 #9 深受启发,感谢大家! 我采用了zhuangqr的方法,比较简单.