winform窗体间传值

.Net技术 码拜 9年前 (2016-03-02) 915次浏览
有三个窗体,A,B,C,通过A打开B,B打开C,三个窗口有一相同对象,B将对象传给C,C改变了对象的值后,再回传给B,B再将值回传给A,怎么样实现传值?
解决方案

5

用静态类吧,定义一个静态类,里面就是你要传递的值。这样三个窗体都能访问。

10

引用 2 楼 hanyemeimei 的回复:

静态类,对象已经定义过了,例如:Product ;C里面已经有值,Product.name = “sss”;但是B里面的Product.name还是原来的值,没有改变,C 关闭了,B怎么才能刷新这个值?

在3个窗体外面定义公共的静态类,这样3个窗体访问和操作的就都会是同一个字段。例如C设置Product.name = “sss”,那么A和B访问得到的也是Product.name = “sss”。

20

引用 2 楼 hanyemeimei 的回复:

静态类,对象已经定义过了,例如:Product ;C里面已经有值,Product.name = “sss”;但是B里面的Product.name还是原来的值,没有改变,C 关闭了,B怎么才能刷新这个值?

数值(对象)其实不是重点。也许现在你学习基本的设计模式还早了一点,还是简单地“一个窗体中的代码调用另一个窗体对象的public 方法”的阶段。假如你已经不是这个阶段,本人给你说一下设计模式:
通常我们在设计对个(窗体)对象之间的关系时,都会刻意去避免“循环性”。原因是循环依赖是难以扩展的。通常都会选择“主-从”或说是“客户-服务”关系,假设A依赖于B 那么 B 就不依赖于 A,即使是间接地循环依赖也会避免。
假设 A 依赖于 B、B依赖于C,那么 A 就能调用 B 对象的接口方法/属性直接给它的某个属性赋值,B也就能给C的某个接口方法/属性而直接传递值。而当C做出了改变,我们会使用 InotifyPropertyChanged 接口模式来通知 B,同时 B也会用相同的接口模式来通知 A。InotifyPropertyChanged接口,以及 ObservableCollection<T> 泛型等等,都是依赖导致设计原则的体现。
说白了,就是 A 直接访问B,B直接访问C,C用事件通知B,B用事件通知 A。这就是架构师采用的模式。

10

你可以试试使用事件。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明winform窗体间传值
喜欢 (0)
[1034331897@qq.com]
分享 (0)