C#如何实现多个窗体控件内容同步更新

xiaosu123 2008-07-10 11:30:15
现在有一个Winform项目,有三个窗体(非父窗体与子窗体)各自有一个textbox控件,如何实现当我更新其中一个窗体控件内容时,其它两个窗体控件内容也一起更新。
...全文
754 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
chong4r 2010-06-13
  • 打赏
  • 举报
回复
学习。。。。
烤火的鱼 2008-07-13
  • 打赏
  • 举报
回复
这个不难吧,创建一个性质
public class Tools
{
private string m_TextBoxValue="";
public static string TextBoxValue
{
get
{
return m_TextBoxValue;
}
set
{
m_TextBoxValue=value;
if(myForm1.TextBox1.Text!=m_TextBoxValue}
myForm1.TextBox1.Text=m_TextBoxValue;
if(myForm2.TextBox1.Text!=m_TextBoxValue}
myForm2.TextBox1.Text=m_TextBoxValue;
if(myForm1.TextBox3.Text!=m_TextBoxValue}
myForm1.TextBox3.Text=m_TextBoxValue;
}
}

意思就是这个意思,当然,你还要设置为各窗口中TextBox属性为public ,或者通过“性质”让Tools能访问,如
public MyTextBox
{
get
{
return this.textbox1;
}
}
这样,虽然textbox1为private的,但Tools仍然能访问
另外,还要判断myform是否存在,这都是相关细节了,任何一个窗口的文本框内容发生改变时,都调用一下:
Tools.TextBoxValue=新的值,一定要if(myForm1.TextBox1.Text!=m_TextBoxValue}
myForm1.TextBox1.Text=m_TextBoxValue;这种方式,即先判断,如果不等,才赋值,否则,容易引起死循环
JeffChung 2008-07-13
  • 打赏
  • 举报
回复
发送消息也行,哈哈
namhyuk 2008-07-13
  • 打赏
  • 举报
回复
会自动订阅某个这个事件...
namhyuk 2008-07-13
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zhzuo 的回复:]
如果是这种情况,最好使用数据绑定来做,建议看一些数据绑定的文章。
[/Quote]
数据绑定可以实现。winform好久没碰了。关键字:INotifyPropertyChanged, BindingSource.

包含基础数据的那个实体类至少实现INotifyPropertyChanged这个接口,这个好像是到了WPF也适用的一个规则。

楼主就简单这么想像吧:实现INotifyPropertyChanged的那个类的对象的属性值一旦发生变化,那么所有绑定到这个类的对象集合(或这个类的对象本身)的界面都会自动改变以反应变化。这是一种机制。winform/WPF的控件一旦绑定到实现了INotifyPropertyChanged的数据时会自动的某个这个事件。具体的有点想不起来了。

突然想到TMD asp.net有个类似的机制该多TM爽啊!老是TMD Postback的烦死了!

marvelstack 2008-07-12
  • 打赏
  • 举报
回复
如果是这种情况,最好使用数据绑定来做,建议看一些数据绑定的文章。
我很懒 2008-07-10
  • 打赏
  • 举报
回复
数据共享可以做到
duqiuyingkucha003 2008-07-10
  • 打赏
  • 举报
回复
级联触发事件
wudi626 2008-07-10
  • 打赏
  • 举报
回复
感觉上要用到窗口句柄和事件的吧
rqx110 2008-07-10
  • 打赏
  • 举报
回复
事件
falx2004 2008-07-10
  • 打赏
  • 举报
回复
观察者模式
xiaosu123 2008-07-10
  • 打赏
  • 举报
回复
各位楼主大哥,有没有例子共享一下啊
fishidea 2008-07-10
  • 打赏
  • 举报
回复
用HOOK也行^_^
格拉 2008-07-10
  • 打赏
  • 举报
回复
学习
netusemaster 2008-07-10
  • 打赏
  • 举报
回复
[Quote=引用楼主 xiaosu123 的帖子:]
现在有一个Winform项目,有三个窗体(非父窗体与子窗体)各自有一个textbox控件,如何实现当我更新其中一个窗体控件内容时,其它两个窗体控件内容也一起更新。
[/Quote]

内容 此内容为对象看待

该对象 后台用deep copy来做
这样可以达到联动的效果
xiaosu123 2008-07-10
  • 打赏
  • 举报
回复
有没有例子
smntbk 2008-07-10
  • 打赏
  • 举报
回复
不用委托事件也行。
三个窗体的TextBox统一命名为TextBox1,并且TextChanged事件:
private void textBox1_TextChanged(object sender, EventArgs e)
{
foreach (Form frm in ((Form)this.MdiParent).MdiChildren)
{
((TextBox)frm.Controls.Find("TextBox1", true)[0]).Text = this.textBox1.Text;
}
}

110,043

社区成员

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

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

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