C#如何实现多个窗体控件内容同步更新 现在有一个Winform项目,有三个窗体(非父窗体与子窗体)各自有一个textbox控件,如何实现当我更新其中一个窗体控件内容时,其它两个窗体控件内容也一起更新。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不用委托事件也行。三个窗体的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; }} 内容 此内容为对象看待该对象 后台用deep copy来做这样可以达到联动的效果 数据绑定可以实现。winform好久没碰了。关键字:INotifyPropertyChanged, BindingSource.包含基础数据的那个实体类至少实现INotifyPropertyChanged这个接口,这个好像是到了WPF也适用的一个规则。楼主就简单这么想像吧:实现INotifyPropertyChanged的那个类的对象的属性值一旦发生变化,那么所有绑定到这个类的对象集合(或这个类的对象本身)的界面都会自动改变以反应变化。这是一种机制。winform/WPF的控件一旦绑定到实现了INotifyPropertyChanged的数据时会自动的某个这个事件。具体的有点想不起来了。突然想到TMD asp.net有个类似的机制该多TM爽啊!老是TMD Postback的烦死了! 这个不难吧,创建一个性质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;这种方式,即先判断,如果不等,才赋值,否则,容易引起死循环 新手求教如何用C#制作个人通讯录 如何对一个对指定域用户共享的文件夹进行文件读写操作 C#获取源码,为什么只获取到一部分,急急急,在线等高手帮忙 谁有用c#.net做的小区物业管理啊? 怎么实现英文字母的递增输出? 请教:什么是套接字 两个按钮分别向datagrid 添加列,怎么弄?? VS2005中 DataGridView的应用问题 如何解决C# Form程序运行过程中不响应的问题? 小弟刚学C#!高手,新手请留下你的qq!留者有分! 什么情况下可以用gridview.datakeys[e.rowindex].value获得主键的值 有谁搞过网银在线的接口的,进来看看!(顶贴给分)
三个窗体的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;
}
}
内容 此内容为对象看待该对象 后台用deep copy来做
这样可以达到联动的效果
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;这种方式,即先判断,如果不等,才赋值,否则,容易引起死循环