1 入口程序
using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace WindowsFormsApplication1 { static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); ParentFrm parentFrm = new ParentFrm(); Application.Run(parentFrm);//启动父窗体 } } } 2 父窗体 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class ParentFrm : Form, InterfaceObserver { public ParentFrm() { InitializeComponent(); } public TextBox getTextBox() { return this.TbParent;//TbParent 是私有的对象 ,所以要有公有的方法获取TbParent对象 } private void button1_Click(object sender, EventArgs e)//点击事件 { ChildFrm childFrm = new ChildFrm(); ChildForm1 childForm1 = new ChildForm1(); childFrm.Show();//显示子窗体 childForm1.Show();//显示子窗体1 childFrm.del += childForm1.getTextBox;将childForm1对象中的方法注册到childFrm类的委托对象中 childFrm.del += this.getTextBox;//将ParentFrm类中的方法注册到childFrm类的委托对象中 } } } 3 子窗体 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplication1 { public delegate TextBox MyDelegate(); public partial class ChildFrm : Form { public MyDelegate del; public List<InterfaceObserver> ListObserver { get; set; } public ChildFrm() { InitializeComponent(); this.ListObserver = new List<InterfaceObserver>(); } private void TbChild_TextChanged(object sender, EventArgs e) { // del().Text = this.TbChild.Text; 不能这样用,这样调用只能同步到添加的最后一个窗口。应该用下面的方法 Delegate[] list = del.GetInvocationList();//委托对象数组 foreach (MyDelegate MyDel in list) { MyDel().Text = this.TbChild.Text;//MyDel()调用委托并获得返回对象TEXTBOX,并个其赋值 } } } } 4 兄弟窗体 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class ChildForm1 : Form, InterfaceObserver { public TextBox getTextBox() { return this.textBox1; } public ChildForm1() { InitializeComponent(); } } }