zoukankan      html  css  js  c++  java
  • 利用自定义事件实现不同窗体间的通讯 C#篇

    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;
        }
    }

  • 相关阅读:
    搜索入门练习题3 全组合 题解
    搜索入门练习题1 素数环 题解
    搜索入门练习题2 全排列 题解
    二分 大纲
    凸包
    快速幂&矩阵快速幂
    最长不下降子序列的优化
    poj 3190 Stall Reservations
    poj 2431 Expedition

  • 原文地址:https://www.cnblogs.com/leeairw/p/134396.html
Copyright © 2011-2022 走看看