📄 eventmanager.cs
字号:
using System;
using System.Collections;
using System.Windows.Forms;
namespace Qeb.Support.Common
{
/// <summary>
/// 自定义消息事件的委托
/// </summary>
public delegate void UIMessageEventHandler(string messageId, UIMessageEventArgs e);
/// <summary>
/// 自定义消息事件的参数类:UIMessageEventArgs
/// </summary>
public class UIMessageEventArgs : System.EventArgs
{
/// <summary>
/// 消息发布者
/// </summary>
private object m_Sender ;
/// <summary>
/// 传递的参数
/// </summary>
private object m_Values;
public object Sender
{
get { return m_Sender; }
}
public object Values
{
get { return m_Values; }
}
/// <summary>
/// 构造方法
/// </summary>
//public UIMessageEventArgs() {}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="values"></param>
public UIMessageEventArgs(object sender, object values)
{
this.m_Sender = sender ;
this.m_Values = values ;
}
}
#region UIMessageInfo消息类
/// <summary>
/// UIMessageInfo类,存储某一消息对应的已订阅事件信息的类
/// </summary>
internal class UIMessageInfo
{
//消息号,消息的唯一标识
private string m_MessageId="";
/// <summary>
/// 消息的唯一标识
/// </summary>
internal string MessageId
{
set
{
m_MessageId = (string)value;
}
get
{
return m_MessageId;
}
}
/// <summary>
/// 定义处理挂钩消息的事件
/// </summary>
internal event UIMessageEventHandler UIMessageEvent = null;
/// <summary>
/// 触发事件的方法定义
/// </summary>
/// <param name="messageId"></param>
/// <param name="e"></param>
internal void onUIMessageEvent(string messageId, UIMessageEventArgs e)
{
if (UIMessageEvent != null)
UIMessageEvent(messageId, e);
}
internal bool IsNullEvent()
{
if (UIMessageEvent == null)
return true;
else
return false;
}
}
#endregion
#region UIMessageManager消息管理类
/// <summary>
/// 消息事件管理器
/// </summary>
public class UIMessageManager
{
private static Hashtable m_EventHashTable = new Hashtable();
/// <summary>
/// 按消息名称或ID注册事件
/// </summary>
/// <param name="messageId">消息名称或ID,必须唯一</param>
/// <param name="subscriber">发起注册的对象</param>
/// <param name="messageDelegate">发起注册对象中处理该消息方法的委托</param>
/// <returns>整形,指示订阅是否成功</returns>
public static int SubscribeEvent(string messageId, object subscriber, UIMessageEventHandler messageDelegate)
{
int retCode = 0 ;
try
{
//存储消息信息的类
UIMessageInfo messageInfo;
//哈希表不存在该消息,则将该消息插入哈希表
if ( m_EventHashTable[messageId] == null )
{
messageInfo = new UIMessageInfo();
messageInfo.MessageId = messageId;
m_EventHashTable.Add(messageId,messageInfo);
}
else
{
messageInfo = (UIMessageInfo)m_EventHashTable[messageId];
}
//将消息处理方法挂钩入事件总
messageInfo.UIMessageEvent += messageDelegate;
}
catch(Exception ex)
{
MessageBox.Show("处理消息订阅发生异常:" + ex.Message);
return -1;
}
return retCode;
}
/// <summary>
/// 取消消息订阅
/// </summary>
/// <param name="messageId"></param>
/// <param name="subscriber"></param>
/// <returns></returns>
public static int UnSubscribeEvent(string messageId,UIMessageEventHandler messageDelegate)
{
int retCode = 0;
try
{
//存储消息信息的类
if (m_EventHashTable[messageId] != null)
{
UIMessageInfo messageInfo;
messageInfo = (UIMessageInfo)m_EventHashTable[messageId];
messageInfo.UIMessageEvent -= messageDelegate;
if (messageInfo.IsNullEvent())
m_EventHashTable.Remove(messageId);
}
}
catch (Exception ex)
{
MessageBox.Show("取消消息订阅发生异常:" + ex.Message);
return -1;
}
return retCode;
}
/// <summary>
/// 按消息号触发已订阅该消息的对象中的方法
/// </summary>
/// <param name="messageId">消息号</param>
/// <param name="e">事件的参数</param>
/// <returns>整形,指示触发是否成功</returns>
public static int FireEvent(string messageId, UIMessageEventArgs e)
{
int retCode = 0 ;
try
{
//从订阅信息的哈希表取出消息类
UIMessageInfo messageInfo = (UIMessageInfo)m_EventHashTable[messageId];
if (messageInfo!=null)
{
//触发订阅该消息的事件
messageInfo.onUIMessageEvent(messageId, e);
}
}
catch(Exception ex)
{
MessageBox.Show("发送消息发生异常:"+ex.ToString());
return -1;
}
return retCode;
}
}
#endregion
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -