如何在窗口间传递数据
我是通过构造函数的参数传递实现的,感觉这样很不爽,而且有些问题,就是Form的资源释放也不太方便,我刚搞.net一个来月,不知道大侠们是如何实现的.
比如我有个Form1里面有个button,按下button就new一个Form2,让用户输入一个string,按下Form2里的button,就关掉Form2,(最好能此时就dispose掉)让Form1得到用户输入的数据.
还有如何让Form2关掉这个事件的同时更新Form1?
我是通过在Form2的buttonClicked事件里调用Form1.refresh()的,还是通过参数传递过来的Form1对象..能不能通过焦点或其他的东西让Form1直接得到Form2的Closed事件?
大侠们处理类似问题时一般怎么实现的?
有例子看看更好,记不清函数名之类的写伪代码看看也行,说思路也可以..谢谢了
问题点数:20、回复次数:9Top
1 楼sailing_hang(东航)回复于 2006-07-05 01:06:50 得分 0
赫赫 ,我知道的也是用构造函数Top
2 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2006-07-06 11:03:41 得分 0
两个button都应该触发Event给main()所在的对象(两个Form所在的对象),由事件处理程序处理这个事件,将一个Form通知的数据传递给另一个Form的指定方法。Top
3 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2006-07-06 11:08:31 得分 0
如果Form2的生命期是由Form1控制的,那么Form2就是用Event通知Form1(此时在Event参数中传递上来数据),然后Form1关闭Form2。Form2通知Form1刷新也是一样道理。Form2并不知道自己被谁控制,Form2并不知道Form1,Form1才知道Form2,只是知道通知自己的所有控制对象刷新和关闭事件就行了。
如果复杂和灵活一点,Form1和Form2都互相不知道,用main所在的那个主控对象来协调所有Form,有时能形成更加抽象、强大的控制逻辑。Top
4 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2006-07-06 11:09:58 得分 0
只是知道通知自己的所有控制 --> Form2只是知道通知自己的所有控制Top
5 楼bumm(......)回复于 2006-07-06 14:31:53 得分 0
在Form1中定义Form2的Disposed事件:
Form2.Disposed += new System.EventHandler(Form2_Disposed);
在Form2_Disposed中执行你想要的操作。Top
6 楼waywander(第三只眼)回复于 2006-07-07 16:14:59 得分 0
窗口之间信息传递 ,除了构造函数以外,还可以设置子窗口的owner
比如主窗口 form1 button点击事件激发的时候
form2 f2= new form2();
f2.Owner = this;
在子窗口的button点击事件
就可以
form1 f1 = (form1)this.Owner;
然后就可以调用form1的公有方法Top
7 楼zhaojiang(不会飞的鱼)回复于 2006-07-07 17:33:42 得分 0
方法:
1.定义公用变量, 这样可以通过实例的公有变量访问.
2.定义方法,用参数传递, 推荐这种方法,这样不会破坏类的完整性,降低传递值所带来的偶合性.
3.另外,也可以定义一个静态类, 在里面定义静态变量, 两个窗口都可以访问 些类的静态变量.Top
8 楼sandsboy(竹子)回复于 2006-07-08 20:00:22 得分 0
减少耦合度的方法
public delegate void NotifyHandle(string s);
在form2中提供一个NofifyHandler类型的接口(Notify),然后在 f = new form2();后加f.Notify=你的方法(规格与NotifyHander一样)在form2的buttonclicked中加 if(Notify!=null){Notify(textbox1.Text);}
Top
9 楼baoxue_tin()回复于 2006-07-21 12:38:46 得分 0
各位高手能不能说详细点?
我是新手,也在为这问题烦恼.
谢过!Top




