C#学习笔记(9)——委托(窗体传值)

说明(2017-5-30 11:38:06):

1. 窗体1传值到窗体2,只要实例化Form2,“Form2 frm2 = new Form2(txt1.Text)”,这里要给Form2加一个带参数的重载,并且继承this,因为要初始化。把txt1.Text传入窗体2接收就可以了。

2. 窗体2再传值回窗体1,就要用到委托了,因为不是传值,而是传方法(如果再实例化一个Form1,那就是打开一个新窗口了)。

(1)在Form1里加一个方法ShowMsg,作用是将参数msg赋值给txt1.Text。

(2)在Form2里新建一个委托,参数是一个字符串msg,给Form2的重载加一个委托参数mdl,当Form1里实例化Form2的时候,可以将ShowMsg方法一起传给Form2.

(3)在Form2里增加一个MyDel类型的字段_mdl,在Form2的重载里,将这个字段等于参数mdl(也就是将来要传进来的ShowMsg)。

(4)在Form2的button里,先判断委托是否存在,然后调用this._mdl,也就是ShowMsg,将txt2.Text的值传给txt1.Text,然后关闭Form2.

3. 其实挺绕的,多写几遍吧!

代码:

Form1.cs

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Threading.Tasks;
 9 using System.Windows.Forms;
10
11 namespace _06委托窗体传值
12 {
13
14     public partial class Form1 : Form
15     {
16         public Form1()
17         {
18             InitializeComponent();
19         }
20
21         private void button1_Click(object sender, EventArgs e)
22         {
23             Form2 frm2 = new Form2(txt1.Text, ShowMsg);
24             frm2.ShowDialog();
25         }
26         public void ShowMsg(string msg)
27         {
28             txt1.Text = msg;
29         }
30     }
31 }

Form2.cs

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Threading.Tasks;
 9 using System.Windows.Forms;
10
11 namespace _06委托窗体传值
12 {
13     public delegate void MyDel(string msg);
14     public partial class Form2 : Form
15     {
16         public Form2()
17         {
18             InitializeComponent();
19         }
20         private MyDel _mdl;
21         public Form2(string str,MyDel mdl):this()
22         {
23             txt2.Text = str;
24             this._mdl = mdl;
25         }
26
27         private void button1_Click(object sender, EventArgs e)
28         {
29             if (this._mdl != null)
30             {
31                 this._mdl(txt2.Text);
32                 this.Close();
33             }
34         }
35     }
36 }

窗体:

效果:

时间: 2024-11-06 07:16:50

C#学习笔记(9)——委托(窗体传值)的相关文章

【Qt学习笔记】2.窗体Widget && 屏幕坐标 && 布局

一.窗体 在Qt中,把窗体(口)叫做Widget. Widget可以是主窗体(口),也可以是依附在主窗体(口)上的各种控件,作为子窗体,这两种窗口,分别称作顶级窗口(top-level widget)和子窗口(sub widget). 顶级窗口:一个标准的窗口,带边框.标题栏.若干按钮.(独立) 子窗口:在窗口里面的窗口,例如:按钮.文本框等控件.(不独立,随着父窗口移动) 注意: 1.每个子窗口都有一个父窗口 2.子窗口里面可能包含了若干子窗口,是一层一层的关系. 3.顶级窗口也有父窗口:就是

[读书笔记]C#学习笔记二: 委托和事件的用法及不同.

前言:  C#委托是什么 c#中的委托可以理解为函数的一个包装, 它使得C#中的函数可以作为参数来被传递, 这在作用上相当于C++中的函数指针. C++用函数指针获取函数的入口地址, 然后通过这个指针来实现对函数的操作. 委托的定义和方法的定义类似, 只是在定义的前面多了一个delegate关键字. 正文: 委托可以被视为一个更高级的指针,它不仅仅能把地址传指向另一个函数,而且还能传递参数,返回值等多个信息. 系统还为委托对象自动生成了同步,异步的调用方式,开发人员使用BeginInvoke,E

JavaScript 学习笔记— —事件委托

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> //事件委托:利用冒泡的原理,把事件加到父级上,触发执行效果 //好处 //1.提高性能 //2.新添加的元素,还会有之前的事件 //event

c#学习笔记03——委托和事件

委托:一种引用类型,这种类型可以用来定义方法签名,从而使用委托实现将方法作为参数传递给其他方法.类似于C++中的函数之争,使用委托使程序员可以将方法引用封装在委托对象内. 定义和声明委托: 1 delegate 返回值 委托名(参数列表); 2 eg: 3 public delegate void SayHelloDelegate(string name); 使用委托:委托其实通过返回值和参数列表来定义方法和签名.任何与委托具有相同返回值和参数列表(签名)的方法都可以赋给该委托. 1 publi

C#学习笔记(委托)

委托的定义 委托(delegate)是一种可以把引用存储为函数的类型.这听起来相当的棘手,但是机制是非常简单的.委托的声明非常类似于函数,但是不带函数体,且要使用delegate关键字.委托的声明指定了一个返回类型和一个参数列表. 在定义了委托后,就可以声明该委托类型的变量.直接把这个变量初始化为与委托相同返回类型和参数列表的函数引用.之后,就可以使用委托变量调用这个函数,就像该变量是一个函数一样. 有了引用函数的变量之后,还可以执行不能用其他方式完成的操作.例如,可以把委托变量作为参数传递给一

Java学习笔记:具体解释传值和传引用

传值和传引用 When you're passing primitives into a method ,you get a distinct copy of the primitive. When you're passing a reference into a method , you get a copy of the reference. 以上引自<Thinging in Java>.总结一下就是无论Java參数的类型是什么.一律传递參数的副本. 在Java中,变量分为以下两类: 对

Java学习笔记:详解传值和传引用

传值和传引用 When you're passing primitives into a method ,you get a distinct copy of the primitive. When you're passing a reference into a method , you get a copy of the reference. 以上引自<Thinging in Java>,总结一下就是不管Java参数的类型是什么,一律传递参数的副本. 在Java中,变量分为以下两类: 对

委托窗体传值

委托学习笔记后续:泛型委托及委托中所涉及到匿名方法、Lambda表达式

引言: 最初学习c#时,感觉委托.事件这块很难,其中在学习的过程中还写了一篇学习笔记:委托.事件学习笔记.今天重新温故委托.事件,并且把最近学习到和委托相关的匿名方法.Lambda表达式及泛型委托记录下来,以备复习使用. 委托: 日常工作中,常常见到委托用在具体的项目中.而且委托使用起来相对来说也是非常简单的,下面列举一个委托实例用以说明如何使用委托,代码如下: class Program { public delegate int CalculateDelegate(int x, int y)