版权声明:本文为博主原创文章,转载请注明出处: https://blog.csdn.net/IntegralforLove/article/details/83021938
利用事件“时刻关注”
事件的主要特点是一对多关联,即一个事件源可以有多个响应者。在具体实现上,事件建立于委托的基础之上,.NET Framework的事件处理机制是基于多路委托实现的。事件通过关键字event定义,只能由事件源对象自己引发,不允许外界引发。
1.主窗口->从窗口:事件建立于委托的基础之上,既然可以用委托实现消息的广播,那么一定能用事件机制实现“消息广播”。主窗体定义一个MyShow事件,从窗体对象响应之。思路如下:
private delegate void ShowDelegate(int num); //自定义一个委托
private event ShowDelegate MyShow; //主窗体定义一个MyShow事件:
private frmOther m_frmOther = null;
private void m_btn_ShowForm_Click(object sender, EventArgs e)
{
m_frmOther = new frmOther();
m_frmOther.Show();
m_frmOther.MyDisplay += new frmOther.DisplayDelegate(__Display); //从窗体实现事件响应方法的挂接
MyShow += new ShowDelegate(m_frmOther.__Show); //主窗体实现事件响应方法的挂接
}
private void m_hScrollBar_Scroll(object sender, ScrollEventArgs e)
{
MyShow(m_hScrollBar.Value); //响应事件,显示滚动条数值
}
private void __Display(int num)
{
m_txt_Num.Text = num.ToString();
}
2.从窗口->主窗口:从窗体在单击按钮时激发一个自定义事件MyDisplay,主窗体定义一个方法来响应这个事件。
private int m_nCounter = 0;
public delegate void DisplayDelegate(int num); //定义委托
public event DisplayDelegate MyDisplay; //定义事件
public void __Show(int num)
{
m_txt_Result.Text = num.ToString();
}
private void m_btn_Counter_Click(object sender, EventArgs e)
{
m_nCounter++;
MyDisplay(m_nCounter); //激发MyDisplay事件,显示按钮计数
}
3.在主窗体中单击“创建从窗口”按键,生成一个从窗体,移动主窗体的滚动条,从窗体显示相应结果。单击从窗体的“计数”按钮,主窗体显示按键次数。