zoukankan      html  css  js  c++  java
  • WinForm中使用自定义事件

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace ConsoleApplication8
    {

    class Program
    {
    static void Main(string[] args)
    {

    //第三步:定义对象并添加事件
    Priter priter = new Priter();
    priter.OnPrintComplete += new EventHandler<PrintCompleteEventArgs>(priter_OnPrintComplete);
    for (int i = 0; i < 500; i++)
    {

    //第四步:执行实际方法
    priter.Print(i);
    System.Threading.Thread.Sleep(100);
    }
    }

    static void priter_OnPrintComplete(object sender, PrintCompleteEventArgs e)
    {

    //第五步:处理回调函数
    Console.WriteLine("完成打印:" + e.message);
    if (e.message % 10 == 0)
    Console.WriteLine("我是10的倍数," + e.message);
    }
    }

    /// <summary>
    /// 第二步:定义事件类
    /// </summary>
    public class Priter
    {
    /// <summary>
    /// 用event关键字声明事件对象(如果EventHandler不够用,可先用delegate定义一个处理事件)
    /// </summary>
    public event EventHandler<PrintCompleteEventArgs> OnPrintComplete;

    /// <summary>
    /// 实际打印方法
    /// </summary>
    /// <param name="data"></param>
    public void Print(int data)
    {
    //在这里执行打印操作..
    //TO DO..
    //..
    Console.WriteLine("开始打印:"+data);

    //执行完后通知执行外部的事件方法(如果是异步操作,可另外开一线程监听然后执行以下通知)
    OnPrintComplete(this, new PrintCompleteEventArgs(data));
    }
    }

    /// <summary>
    /// 第一步:定义事件参数类
    /// </summary>
    public class PrintCompleteEventArgs : EventArgs
    {
    public int message;
    public PrintCompleteEventArgs(int Message)
    {
    this.message = Message;
    }
    }
    }

    --------------------------------------------------------------------------


    namespace 事件
    {
    //发布事件的类
    public class TestEventSource
    {
    //定义事件参数类
    public class TestEventArgs : EventArgs
    {
    public readonly char KeyToRaiseEvent;
    public TestEventArgs(char keyToRaiseEvent)
    {
    KeyToRaiseEvent = keyToRaiseEvent;
    }
    }

    //定义delegate
    public delegate void TestEventHandler(object sender, TestEventArgs e);
    //用event 关键字声明事件对象
    public event TestEventHandler TestEvent;

    //事件触发方法
    protected virtual void OnTestEvent(TestEventArgs e)
    {
    if (TestEvent != null)
    TestEvent(this, e);
    }

    //引发事件
    public void RaiseEvent(char keyToRaiseEvent)
    {
    TestEventArgs e = new TestEventArgs(keyToRaiseEvent);
    OnTestEvent(e);
    }

    }
    //监听事件的类
    public class TestEventListener
    {
    //定义处理事件的方法,他与声明事件的delegate具有相同的参数和返回值类型
    public void KeyPressed(object sender, TestEventSource.TestEventArgs e)
    {
    Console.WriteLine("发送者:{0},所按得健为:{1}", sender, e.KeyToRaiseEvent);
    }

    //订阅事件
    public void Subscribe(TestEventSource evenSource)
    {
    evenSource.TestEvent += new TestEventSource.TestEventHandler(KeyPressed);
    }
    //取消订阅事件
    public void UnSubscribe(TestEventSource evenSource)
    {
    evenSource.TestEvent -= new TestEventSource.TestEventHandler(KeyPressed);
    }
    }

    //测试类
    public class Test
    {
    public static void Main()
    {
    //创建事件源对象
    TestEventSource es = new TestEventSource();
    //创建监听对象
    TestEventListener el = new TestEventListener();
    //订阅事件
    Console.WriteLine("订阅事件\n");
    el.Subscribe(es);
    //引发事件
    Console.WriteLine("输入一个字符,再按enter键");
    string s = Console.ReadLine();
    es.RaiseEvent(s.ToCharArray()[0]);
    //取消订阅事件
    Console.WriteLine("\n取消订阅事件\n");
    el.UnSubscribe(es);

    //引发事件
    Console.WriteLine("输入一个字符,再按enter健");
    s = Console.ReadLine();
    es.RaiseEvent(s.ToCharArray()[0]);

    }
    }

    }

  • 相关阅读:
    heat模板
    Leetcode812.Largest Triangle Area最大三角形面积
    Leetcode812.Largest Triangle Area最大三角形面积
    Leetcode811.Subdomain Visit Count子域名访问计数
    Leetcode811.Subdomain Visit Count子域名访问计数
    Leetcode806.Number of Lines To Write String写字符串需要的行数
    Leetcode806.Number of Lines To Write String写字符串需要的行数
    Leetcode819.Most Common Word最常见的单词
    Leetcode819.Most Common Word最常见的单词
    Leetcode783.Minimum Distance Between BST Nodes二叉搜索树结点最小距离
  • 原文地址:https://www.cnblogs.com/zhuawang/p/3100323.html
Copyright © 2011-2022 走看看