C#窗体间信息的双向传送(三)事件驱动

版权声明:本文为博主原创文章,转载请注明出处: 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.在主窗体中单击“创建从窗口”按键,生成一个从窗体,移动主窗体的滚动条,从窗体显示相应结果。单击从窗体的“计数”按钮,主窗体显示按键次数。

猜你喜欢

转载自blog.csdn.net/IntegralforLove/article/details/83021938