子窗體1: 主窗體 子窗體2/3 區別:事件是安全的,只能在類的內部觸發。 ...
子窗體1:
//聲明一委托 public delegate void SendMessageDel(string str); public partial class childform1 : Form { public childform1() { InitializeComponent(); } #region 用委托實現觀察者模式 //定義一委托的實例 //不安全,可以被外部調用 public SendMessageDel sendMessageDelInstance { get; set; } //委托的方法 private void button1_Click(object sender, EventArgs e) { sendMessageDelInstance("委托實現觀察者模式"); } #endregion #region 用事件實現觀察者模式 //定義事件 public event SendMessageDel sendMessageEvent; private void button2_Click(object sender, EventArgs e) { sendMessageEvent("事件實現觀察者模式"); } #endregion }
主窗體
public partial class mainform : Form { public mainform() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { #region 委托實現觀察者 childform1 c1 = new childform1(); c1.Show(); //窗體2/3註冊到委托 childform2 c2 = new childform2(); c1.sendMessageDelInstance += c2.SetMessage; c2.Show(); childform3 c3 = new childform3(); c1.sendMessageDelInstance += c3.SetMessage; c3.Show(); #endregion } private void button2_Click(object sender, EventArgs e) { #region 事件實現觀察者模式 childform1 c1 = new childform1(); c1.Show(); //窗體2/3註冊到事件 childform2 c2 = new childform2(); c1.sendMessageEvent += c2.SetMessage; c2.Show(); childform3 c3 = new childform3(); c1.sendMessageEvent += c3.SetMessage; c3.Show(); #endregion } }
子窗體2/3
public partial class childform2 : Form { public childform2() { InitializeComponent(); } //委托的方法 public void SetMessage(string str) { this.textBox1.Text = str+" "+DateTime.Now.ToString(); } //事件的方法 public void SetMessage_event(string str) { this.textBox1.Text = str+" "+DateTime.Now.ToString(); } }
區別:事件是安全的,只能在類的內部觸發。