C#事件-两个界面之间处理控件信息

C#事件

事件和委托一直是C#中不太明白的东西,今天在项目上遇到一个问题。界面A中有个TreeView,点击按钮控件,弹出一个模糊查找界面B,在界面B中只有三个控件,分别是编号、ID和下一个的按钮。最终实现的要求是点击下一个,TrewView可以实现从头节点往下查找,直到找到需要的节点为止。当初不知道怎么实现了,后来翻书找到了可以用事件来实现。

事件介绍

事件是基于委托来实现的。委托是一种将方法当做参数来进行传递的方式。而事件是一种复杂的委托。
实现事件需要由发布事件->订阅事件->触发事件三个步骤组成。举个简单的例子:
妈妈发布一个做饭的例子,具体可看下面的链接,我觉得写得非常好,非常透彻。

http://www.cnblogs.com/David-Huang/p/5150671.html

实现

现在着手实现我的功能,主要是将B界面的text信息传递到A界面的控件上。

界面A
 public partial class Form1 : Form
    {
       // public delegate void sendMessage(object sender,EventArgsTest e);
        //public event sendMessage message;

        public Form1()
        {
            InitializeComponent();
        }
        //定义一个事件处理类
        public void SendMd(object sender,TextEventAgs e)
        {
            textBox1.Text = e.textName;
        }

        public void SendMd2(object sender, TextEventAgs e)
        {
            textBox2.Text = e.textName + "ok";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f1 = new Form2();
            //订阅事件
            f1.newTextEvags += SendMd;
            f1.newTextEvags += SendMd2;
            f1.Show();
            //SendMd();
        }
 界面B
 public partial class Form2 : Form
    {
        //类2中用event定义一个事件处理委托
        public event EventHandler<TextEventAgs> newTextEvags;
        public Form2()
        {
            InitializeComponent();
        }
        //事件发布方法
        public void SendMessage(string text)
        {
            EventHandler<TextEventAgs> s1 = newTextEvags;
            //如果有人订阅了事件,进行事件处理
            if (s1 != null)
            {
                //事件触发
                s1(this, new TextEventAgs(text));
            }
        }
        private void Form2_Load(object sender, EventArgs e)
        {
           // f1.sendMessageFromForm += SendMessage;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //事件触发
            SendMessage(textBox1.Text);
        }
    }
 事件中间类
 public class TextEventAgs : EventArgs
    {
        public string textName { get; set; }
        public TextEventAgs(string name)
        {
            textName = name;
        }
    }

遵循事件处理的流程-发布事件-订阅事件-触发事件

现象

这里写图片描述
点击Form2中的按钮,就可以把textBox中的text传递到form1中,这样的处理比直接传参方便的多。事件的处理真是简单、高效!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值