C# 两种窗体传值。

一、利用属性窗体传值。

其实,利用属性传值,原理就是,把窗体Form1(父)和窗体Form2(子)当作两个类。在窗体Form1中new出Form2的新实例之后,通过给Form2窗体定义一个属性来提供一个供Form1调用的接口,说明白了就是,Form2里边有一个“东东(属性)”,是被设置为共有的,在其他类(父类)中新创建了Form2类的新实例后,可以通过Form2的新实例的这个"东东(属性)"(注意当前是在其他类窗体(父类),不是在Form2),来传递Form2的某个控件的值。下面结合代码可能会好理解一点:

首先,在Form1里添加一个button和一个label,在Form2里添加一个TextBox和一个button。代码如下:

 1 /////////////////////////////////////////////////////////////////////////////

 2 //Form1: Button事件。

 3 Form2 frm2 = new Form2();

 4 frm2.ShowDialog();    //此处注意与frm2.Show()的区别。

 5 if(frm2.DialogReasult == DialogReasult.OK)//判断子窗体是否确定关闭。

 6 {

 7    label1.Text = frm2.send;//调用Form2新实例的属性。

 8 }

 9 

10 //Form2 定义一个属性,用于传值

11 public string send

12 {

13    get{ return textBox1.Text};

14 }

15 //Form2 Button事件。

16 this.DialogReasult == DialogReasult.OK 

17 /////////////////////////////////////////////////////////////////////////////
View Code

至此,利用属性进行窗体传值的方法就结束了。如果想要进一步了解什么是属性的话,可以参考我的另一篇拙文:

|博客园:http://www.cnblogs.com/gu-zhan/p/4122045.html 老咸出品| 

二、利用委托窗体传值。

 说实话,其实委托,就是把一个函数作为另一个函数的参数进行传递。

利用委托进行窗体传值,下面看代码介绍:

 1 ///////////////////////////////////////////////////////////

 2 //Form1:Button事件

 3 Form2 frm2 = new Form2(send);

 4 //new Form2(),这个Form2其实可以看作一个构造函数,我们这里仅仅是把send()这个函数通过构造函数初始化了实例frm2.

 5 frm2.Show();//可区别上面那个例子,与ShowDialog()的区别

 6 

 7 //自定义一个函数

 8 public void send(string str)

 9 {

10    label1.Text = str;  

11 }

12 

13 //Form2:

14 //先声明一个委托,可放在类之外。

15 public delegate void Mydel(string str);

16 //声明一个委托的新实例。

17 public Mydel _del;

18 //重写一下构造函数

19 public Form2(Mydel del)

20 {

21   _del = del;

22   InitializeComponent();

23 }

24 

25 //Button事件:

26 _del(textBox1.Text);
View Code

这里我们讲一下思路,其实委托传值,就是在Form1中写一个函数,通过创建Form2的新实例的时候,把这个函数通过Form2的构造函数初始化了一遍。

而在Form2中,定义了一个委托实例来接收Form1中,new Form2()的时候,传递进来的那个函数。最后可以理解为,委托实例"_del"就是等于Form1中的"send()"函数,所以可以看到Button事件里是这样的,_del(textBox1.Text);

希望看到这篇文章的人可以把代码敲一遍,你可以先看看最终是否运行成功,得到你所想要的结果,但是最后一定要敲敲敲敲敲...嘻嘻(*^__^*) 。

转载请注明 博客园 :http://www.cnblogs.com/gu-zhan/ 老咸出品

你可能感兴趣的:(C#)