之前講過了委托腹暖,要了解委托可以看之前講委托的那一節(jié)http://www.reibang.com/p/64416bc28d11
事件是對委托的一種封裝。我們直接使用委托,要在外部向類的委托中添加方法,必須讓委托實例公開,這個時候如果外部直接使用‘=’賦值载迄,會覆蓋之前添加的所有方法,只剩當前方法抡蛙,影響到其他程序护昧,委托也可以直接在類外部執(zhí)行,影響其他部分粗截。事件的優(yōu)點就在與它只能使用‘+=’或‘-=’向委托中添加或刪除方法惋耙,不能直接賦值,且事件只能在類的內(nèi)部調(diào)用熊昌,外部只能訂閱此事件绽榛,不能執(zhí)行。
1.事件的定義
在定義一個事件前婿屹,我們要定義一個相應的委托類型灭美,一般以EventHandler結(jié)尾。也可以使用程序集中預先定義好的委托昂利,事件最常見的委托類型是EventHandler類型的委托届腐,在System命名空間下铁坎,還有其他在控件中經(jīng)常使用的SelectionChanged、TextChanged等犁苏。假定現(xiàn)在有一個自定義的顏色選擇控件ColorSelector硬萍,選擇改變后外部有關(guān)聯(lián)的控件顏色要發(fā)生改變,我們可以自定義一個 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);
根據(jù)委托定義事件
public event ColorChangedEventHandler ColorChanged;
public event SelectionChangedEventHandler SelectionChanged;
2.內(nèi)部事件定義及使用
在顏色選擇控件內(nèi)部有一個ComboBox,用來選擇指定的幾種顏色朴乖。定義一個顏色改變事件供關(guān)聯(lián)的外部控件訂閱。其實這種情況用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); //選中項改變時執(zhí)行外部訂閱事件
}
3.外部訂閱事件
外部其他控件在初始化或加載時訂閱顏色改變事件雹食。
public Map()
{
InitializeComponent();
colorSelector.ColorChanged += Color_ColorChanged;
}
private void Color_ColorChanged(object sender, SelectionChangedEventArgs e)
{
this.Background = colorSelector.SelectedColor;//顏色選擇控件顏色改變后處理代碼
}