Winform学习(四)--消息在不同页面间传递

学习链接:https://blog.csdn.net/winterye12/article/details/77370453

1、新建Msg类

 class Msg
    {
        [DllImport("user32.dll")]
        //发送消息
        public static extern void PostMessage(IntPtr hWnd, int msg, int wParam, int lParam);
        
        /// <summary>
        /// 存放窗口的句柄
        /// </summary>
        private static List<IntPtr> m_hWndList = new List<IntPtr>();

        /// <summary>
        /// 加载窗口的句柄
        /// </summary>
        /// <param name="hWnd"></param>
        public static void AddHandle(IntPtr hWnd)
        {
            if (null != hWnd)
            {
                m_hWndList.Add(hWnd);
            }
        }

        /// <summary>
        /// 移除窗口的句柄
        /// </summary>
        /// <param name="hWnd"></param>
        public static void RemoveHandle(IntPtr hWnd)
        {
            m_hWndList.Remove(hWnd);
        }


        public static void PostMsg(int msg, int wParam, int lParam)
        {
            for (int i = 0; i < m_hWndList.Count; i++)
            {
                if (null != m_hWndList[i])
                {
                    PostMessage(m_hWndList[i], msg, wParam, lParam);
                }
            }
        }
    }

  2、页面类中添加

public newPageTest()
        {
            InitializeComponent();
            Msg.AddHandle(this.Handle);//句柄加入消息列表
        }
 private void cancelBtn_ButtonClick(object sender, EventArgs e)
        {
            Msg.PostMsg(12000, 0, 0);//发送消息
        }

  

  3、待接收消息页面

public Form1()
        {
            InitializeComponent();
            Msg.AddHandle(this.Handle);
}

 /// <summary>
        /// 重写接收窗体消息的方法
        /// </summary>
        /// <param name="m"></param>
        protected override void DefWndProc(ref Message m)
        {
            if (m.Msg == 12000)
            {
                if (m.WParam.ToInt32() == 0)
                {
                  //动作
                }
            }
          }

  

  

posted on 2021-06-08 16:36  七七2020  阅读(114)  评论(0编辑  收藏  举报

导航