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]);

    }
    }

    }

  • 相关阅读:
    初步了解软件工程的概念
    实验十四 团队项目评审&课程学习总结
    201671030125 曾佳+《英文文本统计分析》结对项目报告
    201671030125+词频统计软件项目报告
    201671030125 曾佳 + 实验三作业互评与改进报告
    初识 软件工程
    Enjoy Markdown!
    实验十四 团队项目评审&课程学习总结
    201671030127赵津莹 《英文文本统计分析》结对项目报告
    201671030127词频统计软件项目报告
  • 原文地址:https://www.cnblogs.com/zhuawang/p/3100323.html
Copyright © 2011-2022 走看看