四种方案解决Form之间相互访问、参数传递的问题
发布时间:2013-09-19 11:33:46来源:阅读(1929)
四种方案解决Form之间相互访问、参数传递的问题
/* **************************************************************************
*
* 时 间:2006-05-01
* 程序演示:C#中窗口间的相互访问、参数传递
* 问题叙述:
* 如何在一个窗口中访问另一个窗口的成员变量啊?
* 例如:在Form1 中 new 了一个Form2
* 我想在Form2中来访问Form1中的成员变量A
* 该如何写代码啊??
* 最关键的是如何获取Form1的实例.
* 解决方案1:
* 如果是在两个无关的窗体间要实现上述的访问可以使用Form的Owenr属性
* 在Form1中添加:
* Form2 form2 = new Form2();
* this.AddOwnedForm(form2);
* 在Form2中添加:
* Form1 form1 = (Form1)this.Owner; //直接将已经存在的Form1与form1关联起来
* 之后就可以适时的访问Form1中的Public变量了。
* 如果是在MDI窗体间要实现上述的访问可以使用Form的ParentForm属性
* 在Form1中添加:
* Form2 form2 = new Form2();
* form2.MdiParent = this;
* 在Form2中添加:
* Form1 form1 = (Form1)this.ParentForm; //直接将已经存在的Form1(MDI主窗口)与form1关联起来
* 之后就可以适时的访问Form1中的Public变量了
* 解决方案2:
* 重写Form的构造函数。
* 例如:从Form1生成Form3,
* 只要在Form3的构造函数中添加参数,
* 就可以将Form1中的参数传递给Form3了。
* 这种传参的方法只能后向传递,不能Form3传给Form1
* 解决方案3:
* 运用静态变量。
* 在公共变量之前加入static修饰,
* 就可以在不同Form之间相互传递参数,
* 还可以相互修改。
* 这种方法的不足是:
* 如果static修饰的成员过多,将消耗系统资源。
* 解决方案4:
* 运用delegate。
* 这种方法实现技术含量高,建议首先对delegate全面了解。
* delegate型别看起来有点像函数声明,但实际上它所定义的型别用来指向一个或多个函数(函数指针只指向一个函数?)