C#利用委托实现窗体间的值传递

 A、网上有很多方法,大家可搜一下,都可用。
B、这里只是说明下是只利用委托,学习基本的委托运用。
方法如下:
1、C#建立一个默认工程,默认窗体Form1
2、加入一个新窗体,默认Form2
3、Form1窗体上放一个Label,一个Button,属性分别为:
this.label1.Text = ""; // 清空label的值
this.button1.Text="otherForm"; //设置button显示为otherForm
 
view plaincopy to clipboardprint?
protected override void OnLoad(EventArgs e)  
{  
    base.OnLoad(e);  
    this.label1.Text = "";  
    this.button1.Text = "otherForm";  

        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            this.label1.Text = "";
            this.button1.Text = "otherForm";
        }
4、Form2窗体上放一个textbox1,一个Button,属性分别为:
this.textbox1.Text = ""; //清空textbox的值
this.button1.Text = "input"; //设置button显示为input(输入)
view plaincopy to clipboardprint?
protected override void OnLoad(EventArgs e)  
{  
    base.OnLoad(e);  
    this.textBox1.Text = "";  
    this.button1.Text = "input";  

        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            this.textBox1.Text = "";
            this.button1.Text = "input";
        }
5、上面的步骤就建立了两个基本的窗体,接下来回到Form1的代码设计视图
拷贝下面代码
 view plaincopy to clipboardprint?
using System;  
using System.Collections.Generic;  
using System.ComponentModel;  
using System.Data;  
using System.Drawing;  
using System.Linq;  
using System.Text;  
using System.Windows.Forms;  
 
namespace WindowsFormsApplication1  
{  
    public partial class Form1 : Form  
    {  
        public Form1()  
        {  
            InitializeComponent();  
        }  
 
        protected override void OnLoad(EventArgs e)  
        {  
            base.OnLoad(e);  
            this.label1.Text = "";  
            this.button1.Text = "otherForm";  
        }  
 
        private void button1_Click(object sender, EventArgs e)  
        {  
            Form2 frm2 = new Form2();  
            returnValueEvent += new returnValue(Form1_returnValueEvent);  
            frm2.Show();  
        }  
 
        void Form1_returnValueEvent(string str)  
        {  
            // throw new NotImplementedException();  
            this.label1.Text = str;  
        }  
 
        // 定义委托  
        public delegate void returnValue(string str);  
        // 委托的事件  
        public static event returnValue returnValueEvent;  
        // 委托的事件的函数  
        public void doReturnValue(string str)  
        {  
            returnValueEvent(str);  
        }  
    }  

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            this.label1.Text = "";
            this.button1.Text = "otherForm";
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm2 = new Form2();
            returnValueEvent += new returnValue(Form1_returnValueEvent);
            frm2.Show();
        }
        void Form1_returnValueEvent(string str)
        {
            // throw new NotImplementedException();
            this.label1.Text = str;
        }
        // 定义委托
        public delegate void returnValue(string str);
        // 委托的事件
        public static event returnValue returnValueEvent;
        // 委托的事件的函数
        public void doReturnValue(string str)
        {
            returnValueEvent(str);
        }
    }
}
6、在Form2的代码设计视图中,拷贝下面代码
view plaincopy to clipboardprint?
using System;  
using System.Collections.Generic;  
using System.ComponentModel;  
using System.Data;  
using System.Drawing;  
using System.Linq;  
using System.Text;  
using System.Windows.Forms;  
 
namespace WindowsFormsApplication1  
{  
    public partial class Form2 : Form  
    {  
        public Form2()  
        {  
            InitializeComponent();  
        }  
 
        protected override void OnLoad(EventArgs e)  
        {  
            base.OnLoad(e);  
            this.textBox1.Text = "";  
            this.button1.Text = "input";  
        }  
 
        private void button1_Click(object sender, EventArgs e)  
        {  
            Form1 frm1 = new Form1();  
            frm1.doReturnValue(this.textBox1.Text);  
        }         
    }  

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            this.textBox1.Text = "";
            this.button1.Text = "input";
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Form1 frm1 = new Form1();
            frm1.doReturnValue(this.textBox1.Text);
        }      
    }
}
7、运行后,就可以在两个窗体间传递参数了
 
注:重点是第六步中的,对委托的定义和调用
 
        returnValueEvent += new returnValue(Form1_returnValueEvent);

        void Form1_returnValueEvent(string str)
        {
            // throw new NotImplementedException();
            this.label1.Text = str;
        }
        // 定义委托
        public delegate void returnValue(string str);
        // 委托的事件
        public static event returnValue returnValueEvent;
        // 委托的事件的函数
        public void doReturnValue(string str)
        {
            returnValueEvent(str);
        }
 在Form2中的调用,在按钮的click事件中
            Form1 frm1 = new Form1();
            frm1.doReturnValue(this.textBox1.Text);

posted @ 2009-09-04 20:13  龙宫  阅读(1521)  评论(0编辑  收藏  举报