c# 用委托和事件实现不同窗体间的通讯(一)

 C# 中的“事件”是当对象满足一定条件,发生某些事情时,类向该类的客户提供通知的一种方法。使用事件,拥有该事件的对象不必知道需要通知谁,一旦满足了某个条件,将自动调用该事件,正确通知每个需要通知的对象。通过使用事件,提高了程序的模块化程度。

   例子:通过form1打开form2,改变form2上combox1控件选择的值,然后将 combox1的text值返回到form1中的TextBox1的text上

 在Form2中

    public partial class Form2 : Form

    {

        public delegate void GetSelectionData(object sender, SelectionChangedEventArgs e);

        public event GetSelectionData getData;    //声明事件

 

        public Form2()

        {

            InitializeComponent();

        }    

  

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

        {

            if (getData != null)

            {

                SelectionChangedEventArgs E = new SelectionChangedEventArgs(comboBox1.Text);

                getData(this,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;

        }

    }

在Form1中:

        private void button2_Click(object sender, EventArgs e)

        {

           //为了开始接收事件调用,客户代码先创建事件类型的委托,该委托引用应从事件调用的方法。然后它使用+= 将该委托写到事件可能连接到的其他任何委托上

            m_frm2 = new Form2();

            m_frm2.getData += new Form2.GetSelectionData(m_frm2_SelectionChanged); //与事件挂钩

            m_frm2.ShowDialog();

        }

 

        private void m_frm2_SelectionChanged(object sender,SelectionChangedEventArgs e)

        {

            //获取事件传递过来的数据

            textBox1.Text =e.Selection;

    }

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值