c#自定义事件

Posted 小哈龙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#自定义事件相关的知识,希望对你有一定的参考价值。

目录

一.概述与需求分析

二.c#中自定义事件实现


​​​​​​​

一.概述与需求分析

1.VC++自定义事件:

在VC++的mfc可以自定义消息(WM_USER+n)来定义自己的消息,通过SendMessage等发送消息的函数向指定窗口发送消息,然后在被发送的窗口消息处理函数中处理消息(即消息的响应),此处有一个弊端,发送的自定义消息必须是发给窗口的,接收对象只能是窗口

2.QT中自定义事件(信号)

在QT中有自己独立的一套消息事件发送以及响应流程,那就是信号-槽,实现逻辑就是观察者模式,当有一个对象发出一个自己定义的一个信号,这个信号就类似于广播,在程序进程范围内只要对此信号有兴趣的,都可以连接该信号,创建自己的槽函数(处理函数),而且,信号槽机制,是可以跨线程的,这种方式在程序开发中使用很是方便。

3.在c#中实现自定义事件

在上述两种方式的描述中,QT的信号槽机制相对于MFC自定义消息很是便利,那么在C#中是否有类似的用法?本篇下面内容就卡是讨论如何在c#中实现自定义事件。

二.c#中自定义事件实现

1.事件发送者类

//事件发送者
public class DogEvent

    //1.声明关于事件的委托;
    public delegate void AlarmEventHandler(object sender, EventArgs e);

    //2.声明事件;   
    public static event AlarmEventHandler Alarm;

    //变量
     public static string str="";

    //3.编写引发事件的函数(在程序任意域使用)
    public static void OnAlarm(string strT)
    
        if (Alarm != null)
        
            str=strT+"\\n";
            
            //发送信息
            Alarm(this, new EventArgs());
         
    

2.事件接受者类

假如我需要在一个winform的窗口RichTextBox中实时添加提示信息,将程序的其它流程处理的消息都实时显示在RichTextBox控件中,实现方式如下:

public partical class Form1 : Form

    public Form1(DogEvent Dog)
    
        //其他初始化操作

        //注册监控事件
        DogEvent.Alarm += new DogEvent.AlarmEventHandler(setTextOnEditControl); 
    

    //将字符串内容添加到文本显示控件上
    public void setTextOnEditControl(object sender,EventArgs e)
    
        richTextBox1.AppendText(DogEvent.str);
    

3.使用

//在程序的其他地方直接使用
DogEvent.OnAlarm("test字符1");

以上是关于c#自定义事件的主要内容,如果未能解决你的问题,请参考以下文章

将EditText过滤器设置为自定义范围内的数字

C#上位机制作之串口接受数据(利用接受事件)

如何将范围传递给 Google 电子表格中的自定义函数?

C#事件快捷设置

C# WinForm 用户控件的自定义事件问题

c#自定义事件