winform 控件同步问题

liulingyun3c 2012-03-07 04:54:15
在父子窗体里分别有个一模一样控件,怎样做到两个控件同步,比如改变子窗体控件里的某个属性值,父窗体里的属性值也跟着变化
...全文
196 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
白色的海 2012-03-08
  • 打赏
  • 举报
回复
用绑定好是好,就是一些复杂的数据(比如,控件的颜色,某个节点是否展开等等)你没办法绑定的,用代码实现无非就是罗嗦点,当相对的,你能获得最大的灵活性,这个要看你的需求了,
我这边再提供一个思路,供大家讨论:
Form1是主窗体,Form2是子窗体,在Form2上修改了数据之后通过事件通知Form1,Fomr1在响应该通知事件的处理函数内实现同步(当然了,先要绑定Fomr2的通知函数)。
通知事件:Form2.DataChanged
响应: Form1_OnDataChanged(Dictinary<string,object> datas){}
参数用字典来做,你想同步什么就同步什么。
这种方法在接口上就把工作量全统一掉了,你的封装性就不会被破坏,工作量就在生成通知的数据和响应工作。
stonespace 2012-03-07
  • 打赏
  • 举报
回复
这个实现很麻烦,用代码来同步,修改一个控件的属性,也同时修改另一个控件属性就可以,只是麻烦,
Castiel丶Luo 2012-03-07
  • 打赏
  • 举报
回复
将父窗体控件作为参数传给子窗体
子窗体控件改变时 改变参数对象
liulingyun3c 2012-03-07
  • 打赏
  • 举报
回复
楼上的,能否提供一些具体代码
wanghui0380 2012-03-07
  • 打赏
  • 举报
回复
绑定到相同的数据源上即可

也就是可以把父窗口的数据源当参数传递给子窗口。只要数据源本身具有InoifyPropryChanged接口,那么他将自动触发同步更新过程

实际上微软在msdn上有专门章节说明这个问题
如何:使用 BindingSource 组件跨窗体共享绑定数据

http://msdn.microsoft.com/zh-cn/library/ms404320.aspx
白色的海 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liulingyun3c 的回复:]
你这个只是针对属性不多的情况下,我有个控件有很多属性状态需要维护,如果每个属性这样设的很麻烦。比如树控件我可以改背景色还有控件大小变化,还有节点位置变化等等
[/Quote]
参考我在4楼的回复
白色的海 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ck11926375 的回复:]
父窗体
Form2 f2 = new Form2();
f2.Show(this);
子窗体
((Form1)this.Owner).Controls["textBox1"].Text = this.textBox1.Text;
[/Quote]
同意:
不过该方法破坏了封装的特性。
如果Form1上控件的名字改了,或者是需要同步的控件很多的话,这个代码乱的很。
做一个更新方法全部封装起来,更新方法的参数用一个字典表,字典的关键字可以自己约定为一个参数名,值就是数据。
这种封装复用性很好。
liulingyun3c 2012-03-07
  • 打赏
  • 举报
回复
你这个只是针对属性不多的情况下,我有个控件有很多属性状态需要维护,如果每个属性这样设的很麻烦。比如树控件我可以改背景色还有控件大小变化,还有节点位置变化等等
白色的海 2012-03-07
  • 打赏
  • 举报
回复
思路:
1.子窗体的构造函数中增加一个参数,参数类型为窗体类。
2.为主窗体作一个update的方法,用该方法的参数付给主窗体的某个控件。
2.在主窗体内生成子窗体的时候,将自己作为子窗体构造构造参数传给子窗体,也就是说子窗体持有以为对主窗体的引用。
3.在子窗体的某个控件上修改了数据后,调用内部引用的主窗体的update方法,并将数据传入。

如果用wpf的话则更简单了:
主窗体和子窗体都双向绑定到一个静态类的某个字段上,该字段是依赖属性,这种方式下,只要在子窗体内修改了数据,就可以立即反应到主窗体上。
ck11926375 2012-03-07
  • 打赏
  • 举报
回复
父窗体
Form2 f2 = new Form2();
f2.Show(this);
子窗体
((Form1)this.Owner).Controls["textBox1"].Text = this.textBox1.Text;

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧