c#—事件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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#—事件的主要内容,如果未能解决你的问题,请参考以下文章

C# 中 XBOX 控制器的事件处理程序?

c# 获取移动硬盘信息监听移动设备的弹出与插入事件

C# 最有用的(自定义)代码片段是啥? [关闭]

c#代码片段快速构建代码

此 Canon SDK C++ 代码片段的等效 C# 代码是啥?

是否可以动态编译和执行 C# 代码片段?