zoukankan      html  css  js  c++  java
  • 利用委托与事件进行两个窗体之间的参数传递实例

    利用委托与事件进行两个窗体之间的参数传递实例

    引用:http://blog.sina.com.cn/s/blog_49e3ed640102w0wm.html

    在程序开发中,我们会经常进行不同窗体之间的参数传递,那么如何进行传递更好方便有效呢?实际上我们利用委托和事件进行这项工作是一个不错的选择。今天我们通过一个简单的例子进行说明。大概的思路是建立一个传递参数的类,在类中定义一个带参数的委托,申明一个委托的事件,并定义一个触发事件的带参数的方法。由窗体A中调用类的带参数的方法,从而触发事件,并将窗体A中的参数传递给委托事件,再由委托事件将参数传递给窗体B中的方法,些方法将传递过来的参数写入窗体B中。
    具体方法如下:
    1、定义一个传递参数的类
     public static class chuancan
        {
            public delegate void delegateycyhande(string str1,string str2 );//定义一个委托
            public static event delegateycyhande chuanevent;//申明一个事件
            public static void Dodelegateycyhande(string str1,string str2)//定义一个触发事件的方法
            {
                chuanevent(str1,str2);
            }
        }
    2、父窗体程序
     public partial class mf : Form
        {
            public mf()
            {
                InitializeComponent();
                chuancan.chuanevent+=new chuancan.delegateycyhande(this.DoMethod);//在构造函数中关联事件,这一点很重要。
            }
            public void DoMethod(string getstr1,string getstr2)//为listbox赋值的方法
            {
                string str = getstr1;
                str += "    ";
                str+=getstr2;
                listBox1.Items.Add(str);
            }
            private void bt_zairucf_Click(object sender, EventArgs e)// 打开子窗体
            {
                cf cf1 = new cf();
                cf1.Show();
            }
            private void button1_Click(object sender, EventArgs e)
            {
                listBox1.Items.Clear();
            }
        }
    3.子窗体程序
     public partial class cf : Form
        {
            public cf()
            {
                InitializeComponent();
            }
           private void bt_zairu_Click_1(object sender, EventArgs e)
            {
     //调用chuancan类中的Dodelegateycyhande方法来激发事件
                chuancan.Dodelegateycyhande(this.textBox1.Text, this.textBox2.Text);
                textBox1.Text = "";
                textBox2.Text = "";
                textBox1.Focus();
            }
    }
    程序运行时,首先显示的是父窗体,通过按键开启子窗体,在子窗体中输入信息,点击按钮,将信息传递给父窗体的显示控件。
    当然这个例子中介传递两个参数,我们可以根据需要增加参数的个数。
    另外我在练习这个编程时,还发现一个有趣的事情。那就是我不想通过按钮来触发事件,而是想通过子窗体中的文本框的属性的值的改变即textchanged事件来触发委托事件,结果就出现了我意想不到的效果:我在子窗体的textbox中输入一个字符如“我”,父窗体listbox中马上就出现一个字符“我”,这个很正常吧,我接着在textbox中输入一个“们“,父窗体listbox中不是出现一个”们“,而是在第二行出现”我们“,第一行出现”我“;我又接着输入一个”是“ ,父窗体listbox中第三行出现”我们是“......,也就我在textbox 中每增加 一个字,listbox就会新增一行并把textbox所有信息显示出来。反过来如果我每减少一个字,listbox就会少一个字并显示现有的所有字符,很是有趣吧,这倒底是为什么呢?可能与委托事件触发的机制有关吧!

    利用委托与事件进行两个窗体之间的参数传递实例(一) 

             利用委托与事件进行两个窗体之间的参数传递实例(一)
  • 相关阅读:
    Asp.net 动态添加Meta标签
    【转】在SharePoint Server 2010中更改“我的网站”
    SPQuery DateTime 类型查询
    Asp.net Web Application 打开 SharePoint 2010 Site 错误 The Web application at could not be found
    How To Create SharePoint 2010 Site Collection In Its Own DB
    C# 文件打印
    面试题 java集合
    《深入理解Java虚拟机》(六)堆内存使用分析,垃圾收集器 GC 日志解读
    《深入理解Java虚拟机》(五)JVM调优
    《深入理解Java虚拟机》(四)虚拟机性能监控与故障处理工具
  • 原文地址:https://www.cnblogs.com/janghe/p/7657140.html
Copyright © 2011-2022 走看看