c#在程序中定义和使用自定义事件方法总结

C#在程序中定义和使用自定义事件可以分为以下几个步骤:

步骤1:在类中定义事件

using System;

public class TestClass

{

  //....

  public event EventHandler TestEvent

}

步骤2:定义事件参数

注意:事件参数类TestEventArgs继承自System.EventArgs

using System;

public class TestEventArgs : EventArgs

{

  public TestEventArgs() : base() { }

  public string Message { get; set; }

}

步骤3:在TestClass 引发事件

public class TestClass

{

  // 这个方法引发事件

  public void RaiseTestEvent(string message)

  {

    if (TestEvent == null) return;

    TestEvent(this, new TestEventArgs { Message = message });

  }

  public event EventHandler TestEvent; 

}

步骤4:使用事件

class Program

{

  static void Main(string[] args)

  {

    TestClass tc = new TestClass();

    // 挂接事件处理方法

    tc.TestEvent += Tc_TestEvent;

    Console.WriteLine("按任意键引发事件");

    Console.ReadKey();    

    // 引发事件

    tc.RaiseTestEvent("通过事件参数传递的字符串");

    Console.WriteLine("按任意键退出");

    Console.ReadKey();

  }

  private static void Tc_TestEvent(object sender, EventArgs e)

  {

    // 将事件参数强制转换为TestEventArgs

    TestEventArgs te = (TestEventArgs)e;

    // 显示事件参数中的Message

    Console.WriteLine(te.Message);

  }

}

完整的程序如下

using System;

public class TestClass

{

  public void RaiseTestEvent(string message)

  {

    if (TestEvent == null) return;

    TestEvent(this, new TestEventArgs { Message = message });

  }

  public event EventHandler TestEvent; 

}

public class TestEventArgs : EventArgs

{

  public TestEventArgs() : base() { }

  public string Message { get; set; }

}

class Program

{

  static void Main(string[] args)

  {

    TestClass tc = new TestClass();

    tc.TestEvent += Tc_TestEvent;

    Console.WriteLine("按任意键引发事件");

    Console.ReadKey();

    tc.RaiseTestEvent("通过事件参数传递的字符串");

    Console.WriteLine("按任意键退出");

    Console.ReadKey();

  }

  private static void Tc_TestEvent(object sender, EventArgs e)

  {

    TestEventArgs te = (TestEventArgs)e;

    Console.WriteLine(te.Message);

  }

}
(0)

相关推荐

  • C#中自定义事件和委托实例

    在windows 编程中用到最多的就是控件的事件了,微软给我们很好的方式,把注意力放到事件执行方法的设计和编码上,但是但我们真正弄懂了事件的真正出发执行原理的话,对我们的编程的提高真是非常榜的,例如在windows编程中 如果我单击了一个button按钮触发了button 的click事件  Button1_Click(){} ,但是有时候我们编程的时候,不但想要触发button 的单击事件,我还想要把其他的时间也要调用下来顺序执行,要实现这种方式,除了在方法最后对其他方法的调用,还可以利用将其

  • C#自定义事件模拟风吹草摇摆效果

    这是一个自定义事件的例子.C#.WinForm.Visual Studio 2017. 在HoverTreeForm中画一块草地,上面有许多草(模拟). HewenqiTianyi类模拟天气,会引发"风"事件(HoverTreeWindEvent),风有东风或西风,或静止. 当吹东风,草往西边倒,吹西风则往东边到.静止则草不会东歪西倒. 草地上每一颗草都监听HoverTreeWindEvent事件,根据风向(WindDdirection)调整姿态. HewenqiTianyi中有定时器

  • C#自定义事件之属性改变引发事件示例

    本文实例为大家分享了C#属性改变引发事件示例的具体代码,供大家参考,具体内容如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication15 { class Program { static void Main(string[] args) { Monitor m = new Monitor(); m.PropertyCha

  • 在C#使用字典存储事件示例及实现自定义事件访问器

    使用字典存储事件实例 accessor-declarations 的一种用法是公开很多事件但不为每个事件分配字段,而是使用字典来存储这些事件实例.这只在具有很多事件但您预计大多数事件都不会实现时才有用. public delegate void EventHandler1(int i); public delegate void EventHandler2(string s); public class PropertyEventsSample { private System.Collecti

  • asp.net中c#自定义事件的实现方法详解

    本文实例讲述了asp.net中c#自定义事件的实现方法.分享给大家供大家参考.具体分析如下: c#自定义事件分为六步,声明关于事件的委托,声明事件,编写引发事件的函数,事件处理,这里我们就来具体的介绍一下. C#自定义事件的具体实现步骤如下: 1.声明一个delegate: (用于事件的类型的定义) 如: 复制代码 代码如下: public delegate void 事件名称EventHandler(object serder, EventArgs e); 事件名称用你的自己的来代替,随后的E

  • C#自定义事件及用法实例

    本文实例讲述了C#自定义事件及用法.分享给大家供大家参考.具体分析如下: 事件是C#中一个重要的内容,MSDN上有一个自定义事件的演示示例.我看了半天有点晕,所以新建了一个winform工程添加了一个按钮,然后找出调用的程序,一对比做了一个类似的示例,就明白了.看代码有时候比看文档来得更快. 所以还是一贯的原则,来干的,不来稀的. using System; namespace TestEventArgs { /// <summary> /// 这个类对应于EventArgs,做对比学习. /

  • C#自定义事件监听实现方法

    本文实例讲述了C#自定义事件监听实现方法.分享给大家供大家参考.具体实现方法如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApp { /// <summary> /// 定义事件 /// </summary> class CustomEvent { /// <summary> /// 定义委托 /// &

  • c#在程序中定义和使用自定义事件方法总结

    C#在程序中定义和使用自定义事件可以分为以下几个步骤: 步骤1:在类中定义事件 using System; public class TestClass { //.... public event EventHandler TestEvent } 步骤2:定义事件参数 注意:事件参数类TestEventArgs继承自System.EventArgs using System; public class TestEventArgs : EventArgs { public TestEventArg

  • 详解C++程序中定义struct结构体的方法

    什么是结构体? 简单的来说,结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型,它的特点和数组主要有两点不同,首先结构体可以在一个结构中声明不同的数据类型,第二相同结构的结构体变量是可以相互赋值的,而数组是做不到的,因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是),数组名称是常量指针,所以不可以做为左值进行运算,所以数组之间就不能通过数组名称相互复制了,即使数据类型和数组大小完全相同. 结构体的定义 定义结构体使用struct修饰符,例如: struc

  • 关于C++中定义比较函数的三种方法小结

    C++编程优与Pascal的原因之一是C++中存在STL(标准模板库).STL存在很多有用的方法. C++模板库中的许多方法都需要相关参数有序,例如Sort().显然,如果你想对一个集合进行排序,你必须要知道集合中的对象,那个在前那个在后.因此,学会如何定义比较方法是非常重要的. C++模板库的许多容器需要相关类型有序,例如set<T> 和priority_queue<T>. 这篇文章旨在告诉大家如何为一个类定义一个排序方法,以便在STL容器或者方法中使用. 作为一个C++程序员,

  • .NET 6中为record类型自定义Equals方法

    目录 一.重写Equals方法 二.自定义Equals方法 三.结论 前言: record类型,这是一种新引用类型,而不是类或结构.record与类不同,区别在于record类型使用基于值的相等性. 例如: public record DemoRecord(int id); public class DemoClass {     public DemoClass(int id)     {         this.id = id;     }     public int id { get;

  • nodejs 中模拟实现 emmiter 自定义事件

    nodejs 中模拟实现 emmiter 自定义事件 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script> function Emitter() { this.events = {}; //存放事件的地方 } Emitter.prototype.on = function(type, cb) { var

  • 如何在程序中判断VS的版本(实现方法详解)

    代码如下所示: #include<iostream> using namespace std; int main() { cout << _MSC_VER << endl; return 0; } 在VC6.0中结果为:1200 在VC10.0(VS2010)中结果为:1600 _MSC_VER实际就是 Microsoft visual c++ version(是微软的预定义宏). 具体对应如下: MS VC++ 14.0 _MSC_VER = 1900(VS2015)

  • C#中TreeView节点的自定义绘制方法

    本文实例讲述了C#中TreeView节点的自定义绘制方法.分享给大家供大家参考.具体如下: if ((e.State & TreeNodeStates.Selected) != 0) { //演示为绿底白字 e.Graphics.FillRectangle(Brushes.DeepSkyBlue, e.Node.Bounds); Font nodeFont = e.Node.NodeFont; if (nodeFont == null) nodeFont = ((TreeView)sender)

  • 在.net应用程序中运行其它EXE文件的方法

    本文实例讲述了在.net应用程序中运行其它EXE文件的方法.分享给大家供大家参考.具体实现方法如下: Process proc = new Process(); proc.StartInfo.FileName = @"D:\Program Files\Foxmail\Foxmail.exe"; //可以用绝对路径 proc.StartInfo.Arguments = ""; proc.Start(); 希望本文所述对大家的C#程序设计有所帮助.

  • ES6中定义类和对象的方法示例

    本文实例讲述了ES6中定义类和对象的方法.分享给大家供大家参考,具体如下: 类的基本定义和生成实例: // 类的基本定义和生成实例 class Parent{ //定义一个类 constructor(name='xiaxaioxian'){ this.name= name; } } // 生成一个实例 let g_parent = new Parent(); console.log(g_parent); //{name: "xiaxaioxian"} let v_parent = ne

  • 微信小程序中进行地图导航功能的实现方法

    前段时间一直都在做小程序做了两个月了,其中对于小程序还是有很不理解的地方看着一些大企业的小程序自己模仿其实还是有一些难度的,我觉得学习小程序看一遍文档是不够的我们要做的是看别人的例子对着文档一一对照! 好这次我们来开始我们的开发,其实微信小程序里面是不能导航的,原因是小程序的代码最多只能有1M,他的运行内存只能有10M,一个区域地图下载下来就不止1M了所以在应用内我们无法做到导航的,但是应用外呢! 我问过很多做安卓和IOS的同僚一般如果导航这个功能不是很重要的话就会放到应用外来做这个功能,但是高

随机推荐