111,080
社区成员




- MiddleModule:
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace Observer
- {
- /// <summary>
- /// 定义发布消息的委托
- /// </summary>
- /// <param name="sender">发布者</param>
- /// <param name="msg">消息</param>
- public delegate void Send(object sender, object msg);
- /// <summary>
- /// 观察者的中间模块组建
- /// </summary>
- public class MiddleModule
- {
- /// <summary>
- ///消息发布的事件
- /// </summary>
- public static event Send eventSend;
- public static void SendMessage(object sender, object msg)
- {
- if (eventSend != null)
- {
- eventSend(sender, msg);
- }
- }
- }
- }
- namespace WinObserver
- {
- public partial class FrmMain : Form
- {
- /// <summary>
- /// 构造方法,在构造主窗体的时候就订阅来自FrmChild1的消息
- /// </summary>
- public FrmMain()
- {
- InitializeComponent();
- MiddleModule.eventSend += new Send(MiddleModule_eventSend);
- }
- /// <summary>
- /// 接收FrmChild1的回传数据
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="msg"></param>
- void MiddleModule_eventSend(object sender, object msg)
- {
- FrmChild1 frmChild1 = sender as FrmChild1;
- if (null != frmChild1)
- {
- this.lblMsg.Text = "FrmChild1的回传数据:"+msg.ToString();
- }
- }
- private void btnShow1_Click(object sender, EventArgs e)
- {
- FrmChild1 frmChild1 = FrmChild1.CreateInstance();
- frmChild1.Show();
- }
- private void btnShow2_Click(object sender, EventArgs e)
- {
- FrmChild2 frmChild2 = FrmChild2.CreateInstance();
- frmChild2.Show();
- }
- private void btnSend_Click(object sender, EventArgs e)
- {
- //由Observer模块传递数据
- if (String.IsNullOrEmpty(this.txtMsg.Text))
- {
- MiddleModule.SendMessage(this, String.Empty);
- }
- else
- {
- MiddleModule.SendMessage(this, this.txtMsg.Text);
- }
- }
- }
- }
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- using Observer;
- namespace WinObserver
- {
- public partial class FrmChild1 : Form
- {
- private static FrmChild1 frmChild1 = null;
- private FrmChild1()
- {
- InitializeComponent();
- MiddleModule.eventSend += new Send(MiddleModule_eventSend);
- }
-
- void MiddleModule_eventSend(object sender, object msg)
- {
- FrmMain frmMain = sender as FrmMain;
- if (null != frmMain)
- {
- this.lblMsg.Text = msg.ToString();
- }
- }
- public static FrmChild1 CreateInstance()
- {
- if (null == frmChild1)
- {
- frmChild1 = new FrmChild1();
- }
- return frmChild1;
- }
- private void btnSendBack_Click(object sender, EventArgs e)
- {
- //由Observer模块传递数据
- if (String.IsNullOrEmpty(this.txtMsg.Text))
- {
- MiddleModule.SendMessage(this, String.Empty);
- }
- else
- {
- MiddleModule.SendMessage(this, this.txtMsg.Text);
- }
- }
- }
- }
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- using Observer;
- namespace WinObserver
- {
- public partial class FrmChild2 : Form
- {
- private static FrmChild2 frmChild2 = null;
- /// <summary>
- /// 接收来自FrmMain传递过来的数据
- /// </summary>
- private FrmChild2()
- {
- InitializeComponent();
- MiddleModule.eventSend += new Send(MiddleModule_eventSend);
- }
- void MiddleModule_eventSend(object sender, object msg)
- {
- FrmMain frmMain = sender as FrmMain;
- if (null != frmMain)
- {
- this.lblMsg.Text = msg.ToString();
- }
- }
- public static FrmChild2 CreateInstance()
- {
- if (null == frmChild2)
- {
- frmChild2 = new FrmChild2();
- }
- return frmChild2;
- }
- }
- }
public static FrmChild1 CreateInstance()
{
if (null == frmChild1 || frmChild1.IsDisposed)
{
frmChild1 = new FrmChild1();
}
return frmChild1;
}
public static FrmChild2 CreateInstance()
{
if (null == frmChild2 || frmChild2.IsDisposed)
{
frmChild2 = new FrmChild2();
}
return frmChild2;
}
public class MiddleModule
{
/// <summary>
///消息发布的事件
/// </summary>
public static event Send eventSend;
public static void SendMessage(object sender, object msg)
{
if (eventSend != null)
{
eventSend(sender, msg);
}
}
}
private static FrmChild1 frmChild1 = null;
会导致子窗口关闭后,再按主窗口的showchild时会报错。不明白为什么要储存这个子变量......d大家继续讨论啊~!