C#event事件使用笔记

C#中event是用于发布订阅事件,一般和委托delegate配合使用。

如果要使用event,就要先搞清楚四个东西

  • 发布者(publisher),发布某个事件的类或结构。
  • 订阅者(subscriber),注册在事件发生时得到通知的类或结构。
  • 事件处理程序(event handler),订阅者收到通知时要执行的方法。
  • 触发(raise)事件,就是发布通知(依次执行委托列表的方法)。

 

比如我们写了一个弹窗组件popwindow,上面有输入框、确定按键和取消按键三个控件。这个弹窗组件可以被不同Form调用,进行一些文字输入。当按下弹窗的确定按键,则获取输入框的文字,按下取消按键则不理会。

如果不使用EVENT,一般使用以下方法:

方法一,可以用反射(Reflaction),但是这样太笨重了。

方法二,在 popwindow 类中直接写 调用它的窗体 的实例.但这样的设计很不灵活,不同的Form调用起来非常不方便。

 

如果用Event,可以在popwindow中发布事件,需要调用的Form订阅这个事件,并为事件指定处理程序,最后由popwindow触发该事件。

 public partial class InputPopWindow : Form
    {
        public InputPopWindow()
        {
            InitializeComponent();
        }
        public delegate void CallHandler(string msg);//用委托类型来定义传入参数是String
        public event CallHandler OkClickedEvent; //发布事件

        private void button2_Click(object sender, EventArgs e)
        {
            OkClickedEvent(textBox1.Text);  //触发事件
        }
           
        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }

在需要调用InputPopWindow的Form中订阅事件

      private void button1_Click(object sender, EventArgs e)
        {
            InputPopWindow inputPopWindow = new InputPopWindow();
            inputPopWindow.OkClickedEvent += ShowInput; //订阅事件,并指定处理方法
            inputPopWindow.Show();
        }

        void ShowInput(String title)
        {
            MessageBox.Show(title);
        }

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值