111,120
社区成员
发帖
与我相关
我的任务
分享
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大家继续讨论啊~!