使用自定義事件完成不同窗體間的通訊 -- C#篇
發表時間:2024-02-13 來源:明輝站整理相關軟件相關文章人氣:
C# 中的“事件”是當對象滿足一定條件,發生某些事情時,類向該類的客戶提供通知的一種方法。使用事件,擁有該事件的對象不必知道需要通知誰,一旦滿足了某個條件,將自動調用該事件,正確通知每個需要通知的對象。通過使用事件,提高了程序的模塊化程度。 要在程序中使用自定義事件,需按以下步驟進行:
1、聲明事件
要在類內聲明事件,首先必須聲明該事件的委托類型:
public delegate void SelectionChangedEventHandler(object sender,
SelectionChangedEventArgs e);
說明:由于本示例程序需在事件中傳遞數據,因此定義了EventArgs的派生類SelectionChangedEventArgs。
public class SelectionChangedEventArgs : EventArgs
{
private string m_selection;
//本屬性用于傳遞事件數據
public string Selection
{
get { return m_selection; }
}
public SelectionChangedEventArgs(string selection)
{
m_selection = selection;
}
}
委托類型定義傳遞給處理該事件的方法的一組參數。多個事件可共享相同的委托類型,因此僅當尚未聲明任何合適的委托類型時才需要執行該步驟。
接下來,聲明事件本身:
public event SelectionChangedEventHandler SelectionChanged;
2、調用事件
如果沒有任何客戶將委托與該事件掛鉤,該字段將為空;否則該字段引用應在調用該事件時調用的委托。因此,調用事件時通常先檢查是否為空,然后再調用事件。
public class Form2 : System.Windows.Forms.Form
{
... ...
public event SelectionChangedEventHandler SelectionChanged;
... ...
private void comboBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
if (SelectionChanged != null)
{
SelectionChangedEventArgs E = new SelectionChangedEventArgs(comboBox1.Text);
SelectionChanged(this, E);
}
}
}
3、與事件掛鉤
為了開始接收事件調用,客戶代碼先創建事件類型的委托,該委托引用應從事件調用的方法。然后它使用 += 將該委托寫到事件可能連接到的其他任何委托上。
public class Form1 : System.Windows.Forms.Form
{
... ...
private Form2 m_frm2;
... ...
public Form1()
{
... ...
m_frm2 = new Form2();
//與事件掛鉤
m_frm2.SelectionChanged += new SelectionChangedEventHandler(frm2_SelectionChanged);
}
... ...
private void button1_Click(object sender, System.EventArgs e)
{
m_frm2.ShowDialog();
}
private void frm2_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
//獲取事件傳遞過來的數據
textBox1.Text = e.Selection;
}
}
本示例效果如下圖所示: