在父子窗体里分别有个一模一样控件,怎样做到两个控件同步,比如改变子窗体控件里的某个属性值,父窗体里的属性值也跟着变化
解决方案 »
- winform 中音频文件的播放不了...求大家都来给指教!!!!
- Interface(接口)如何实现功能的啊
- [C#]拖动窗体或按住某些窗体控件时,计算工作暂停...
- AT指令怎么发送带端口短信吗?
- 一个新的类中去控制另外的窗口的问题
- VS.NET里有没有相javadoc一样的产生工具。
- 如何使窗体大小固定不变,而不会拖动时会边化?
- 图片上传查看下载桌面应用(网络版)开发设计思路咨询
- 将Jmail附件转换成流或字节数组的问题,希望各位能指点我一下,谢谢大家了!
- 数据绑定的问题,请高手绑我看看.
- 在WPF里面每添加一张图片都要改下Build Action到Resource?
- 下面的代码我放在button的click事件中可以执行但放在窗体的load事件中代码执行但没有出现矩形,为什么,求救???
Form2 f2 = new Form2();
f2.Show(this);
子窗体
((Form1)this.Owner).Controls["textBox1"].Text = this.textBox1.Text;
1.子窗体的构造函数中增加一个参数,参数类型为窗体类。
2.为主窗体作一个update的方法,用该方法的参数付给主窗体的某个控件。
2.在主窗体内生成子窗体的时候,将自己作为子窗体构造构造参数传给子窗体,也就是说子窗体持有以为对主窗体的引用。
3.在子窗体的某个控件上修改了数据后,调用内部引用的主窗体的update方法,并将数据传入。如果用wpf的话则更简单了:
主窗体和子窗体都双向绑定到一个静态类的某个字段上,该字段是依赖属性,这种方式下,只要在子窗体内修改了数据,就可以立即反应到主窗体上。
不过该方法破坏了封装的特性。
如果Form1上控件的名字改了,或者是需要同步的控件很多的话,这个代码乱的很。
做一个更新方法全部封装起来,更新方法的参数用一个字典表,字典的关键字可以自己约定为一个参数名,值就是数据。
这种封装复用性很好。
如何:使用 BindingSource 组件跨窗体共享绑定数据http://msdn.microsoft.com/zh-cn/library/ms404320.aspx
我这边再提供一个思路,供大家讨论:
Form1是主窗体,Form2是子窗体,在Form2上修改了数据之后通过事件通知Form1,Fomr1在响应该通知事件的处理函数内实现同步(当然了,先要绑定Fomr2的通知函数)。
通知事件:Form2.DataChanged
响应: Form1_OnDataChanged(Dictinary<string,object> datas){}
参数用字典来做,你想同步什么就同步什么。
这种方法在接口上就把工作量全统一掉了,你的封装性就不会被破坏,工作量就在生成通知的数据和响应工作。