C# 事件(event)

之前讲过了委托,要了解委托可以看之前讲委托的那一节https://www.jianshu.com/p/64416bc28d11

事件是对委托的一种封装。我们直接使用委托,要在外部向类的委托中添加方法,必须让委托实例公开,这个时候如果外部直接使用‘=’赋值,会覆盖之前添加的所有方法,只剩当前方法,影响到其他程序,委托也可以直接在类外部执行,影响其他部分。事件的优点就在与它只能使用‘+=’或‘-=’向委托中添加或删除方法,不能直接赋值,且事件只能在类的内部调用,外部只能订阅此事件,不能执行。

1.事件的定义

在定义一个事件前,我们要定义一个相应的委托类型,一般以EventHandler结尾。也可以使用程序集中预先定义好的委托,事件最常见的委托类型是EventHandler类型的委托,在System命名空间下,还有其他在控件中经常使用的SelectionChanged、TextChanged等。假定现在有一个自定义的颜色选择控件ColorSelector,选择改变后外部有关联的控件颜色要发生改变,我们可以自定义一个 ColorChanged委托。

public delegate void ColorChangedEventHandler(object sender, SelectionChangedEventArgs e);
public delegate void EventHandler(object sender, EventArgs e);
public delegate void SelectionChangedEventHandler(object sender, SelectionChangedEventArgs e);
public delegate void TextChangedEventHandler(object sender, TextChangedEventArgs e);

根据委托定义事件

public event  ColorChangedEventHandler  ColorChanged;
public event SelectionChangedEventHandler SelectionChanged;

2.内部事件定义及使用

在颜色选择控件内部有一个ComboBox,用来选择指定的几种颜色。定义一个颜色改变事件供关联的外部控件订阅。其实这种情况用SelectionChangedEventHandler就可以了,不过为了示例这里还是自定义一个委托。

public delegate void ColorChangedEventHandler(object sender, SelectionChangedEventArgs e);
public event  ColorChangedEventHandler  ColorChanged;   //颜色改变事件,供外部订阅

 private void CbColor_SelectionChanged(object sender, SelectionChangedEventArgs e) //ComboBox选中项改变事件
 {
        ColorChanged?.Invoke(sender,e);    //选中项改变时执行外部订阅事件
 }

3.外部订阅事件

外部其他控件在初始化或加载时订阅颜色改变事件。

       public Map()
        {
            InitializeComponent();
            colorSelector.ColorChanged += Color_ColorChanged;  
        }

        private void Color_ColorChanged(object sender, SelectionChangedEventArgs e)
        {
               this.Background = colorSelector.SelectedColor;//颜色选择控件颜色改变后处理代码
        }

你可能感兴趣的:(C# 事件(event))