首页 > 代码库 > c#—事件

c#—事件

事件比委托多了event关键字,和+=

事件必须要触发

触发执行的关系

技术分享

sender:表示触发这个事件的对象

e 就是执行这个事件所需要的数据资源

委托是在哪都可以调用,作用是:占位,在不知道将来要执行的具体方法的代码时可以先用一个委托变量来代替方法调用

事件的作用:和委托的变量一样,只是使用上有一些限定:只能在类的内部调用   通过+= -+来赋值

委托不安全,事件是一个类型安全的委托,因为只能在类的内部进行调用

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

namespace _08事件的本质
{
    class Program
    {
        static void Main(string[] args)
        {
            PlayMusic p = new PlayMusic("三生三世");
            p.DelPlayOver += P_DelPlayOver;
            p.PlaySongs();


            Console.ReadKey();
        }

        private static void P_DelPlayOver(object sender, EventArgs e)
        {
            PlayMusic p = sender as PlayMusic;
            Console.WriteLine(p.Name + "over");
        }
    }
    class PlayMusic
    {
        public event EventHandler DelPlayOver;
        public string Name { get; set; }
        public PlayMusic(string name)
        {
            this.Name = name;
        }
        public void PlaySongs()
        {
            Console.WriteLine("start{0}",this.Name);
            Thread.Sleep(3000);
            if (DelPlayOver != null)
            {
                EventArgs e = new EventArgs();
                DelPlayOver(this, e);
            }
        }
    }
}

在winform中我们可以自己去写事件,

 如果按钮式自己动态生成的,则必须自己去写事件

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace _09自己写事件
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Button btn = new Button();
            btn.Location = new Point(154, 62);
            btn.Size = new Size(175, 23);
            btn.Text = "I am 动态的";
            btn.Click += Btn_Click;
            btn.Click += Btn_Click1;
            this.Controls.Add(btn);
        }

        private void Btn_Click1(object sender, EventArgs e)
        {
            MessageBox.Show("我被点击了22222222");
        }

        private void Btn_Click(object sender, EventArgs e)
        {
            MessageBox.Show("我被点击了11111111");
        }
    }
}

c#—事件