⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eventmanager.cs

📁 基于C/S的医疗卫生管理系统
💻 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 + -