我是靠谱客的博主 能干香氛,最近开发中收集的这篇文章主要介绍子类(子窗体)向主窗体发送消息,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

这里演示的是,在主窗体代码块中,重写拦截信息方法。

首先新建一个类:

这个类名定义为Msg

[DllImport("User32.dll",EntryPoint = "SendMessage")]
private static extern IntPtr SendMessage(int hWnd,int msg,IntPtr wParam,IntPtr IParam);
[DllImport("User32.dll",EntryPoint = "FindWindow")]
//IpClassName表示主窗体的实例名 IpWindowName是主窗体的名字(也就是主窗体的text属性值)
private static extern int FindWindow(string IpClassName,string IpWindowName);
//定义消息变量 这个变量代表这个子类向主窗体发送的“句柄”,通过这个句柄,可以在拦截消息方法中识别是该//类发送给过来的
public const int CUSTOM_MESSAGE = 0X400+2;
//向窗体发送消息的方法
public void SendMsgToMainForm(int msg)
{
    int WINDOW_HANDLER = FindWindow(null,"main_form");

    if(WINDOW_HANDLER == 0)    
    {
        throw new Exception("Could not find Main Window!");
    }
    long result = SendMessage(WINDOW_HANDLER,CUSTOM_MESSAGE,new     
    IntPtr(msg),IntPtr.Zero).ToInt64();
}

在主窗体中重写拦截方法:

//拦截消息方法
protected override void WndProc(ref Message msg)
{
    try
    {
        switch(msg.Msg)
        {
            case Msg.CUSTOM_MESSAGE://处理自定义消息
            //msg.WParam是子类传过来的值
            Messagebox.Show(msg.WParam.ToString());
            break;
            default:
            base.WndProc(ref msg);//调用基类方法处理非自定义消息
            break;
        }
    }
    catch(Exception ex)
    {
        LogHelper.Error("处理拦截信息出错!"+ex.Message,new Exception());
    }
}

之后把这个拦截方法放在主窗体类的构造函数里即可。

最后

以上就是能干香氛为你收集整理的子类(子窗体)向主窗体发送消息的全部内容,希望文章能够帮你解决子类(子窗体)向主窗体发送消息所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部