窗体间传值(委托)

窗体间的传值很常用(还记得当时困扰了我好久。。。),有几种方式都可以实现,这里采用委托的方式。

1.首先,建好两个窗体,想要的效果如下。

2.看看里面的代码

2.1 Form1的代码

 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.Windows.Forms;
 9
10 namespace 窗体传值_委托_
11 {
12     //设置给 文本框赋值方法 的委托
13     public delegate void setTextBox1ValueDel(string str);
14
15     public partial class Form1 : Form
16     {
17         public Form1()
18         {
19             InitializeComponent();
20         }
21
22         //设置文本框的text
23         private void SetTextBox1Value(string str)
24         {
25             this.textBox1.Text = str;
26         }
27
28         //打开Form2
29         private void btnOpenForm2_Click(object sender, EventArgs e)
30         {
31             Form2 frm = new Form2(SetTextBox1Value);
32             frm.ShowDialog();
33         }
34     }
35 }

2.2 Form2 的代码

 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.Windows.Forms;
 9
10 namespace 窗体传值_委托_
11 {
12     public partial class Form2 : Form
13     {
14
15         // 文本框赋值方法 的委托属性
16         private setTextBox1ValueDel _setTextBox1ValueDel;
17
18         public Form2(setTextBox1ValueDel del )
19         {
20             InitializeComponent();
21             this._setTextBox1ValueDel = del;
22         }
23
24         //发送
25         private void btnSend_Click(object sender, EventArgs e)
26         {
27             _setTextBox1ValueDel(this.textBox1.Text);
28         }
29     }
30 }

3.到这里,问题已经解决了,可以关闭这个页面了。如果你没有成功,请看下面。

3.1委托

使用委托一共分三步:

1.定义

1.1看好了,setTextBox1ValueDel 直接定义在了命名空间下,而不是在某个类的下面。它代表的是一个方法的类型。

这个方法,没有返回值,参数是一个string类型。

1.1.1 为什么这么定义呢,是根据我想要被调用的方法决定的。被调用的方法是没有返回值的,只有一个string参数。

2.实例化

2.1 我在Form2的窗体里定义了一个setTextBox1ValueDel 类型的属性。

2.2 setTextBox1ValueDel 委托有了,但它自己并不知道自己是哪一个方法的委托(我还是觉得用“代理”这个词更好理解,某些语言中“委托”被称作“代理”)。

所以有了下面的代码:

2.2.1将方法名传递给Form2

2.2.2 Form2中的代理初始化

3.调用

3.1 现在可以调用了,传入的是string

4.我这么啰嗦的,写的这么详细,只是为了使用委托进行窗体间的值的传递吗?

4.1 线程

我是在线程的使用中才了解委托的,下一篇我将介绍在线程中的使用。

。。。。。其实,线程中使用和这里一样,我不过是想引出其它的知识点。

4.2 事件

我只知道,事件其实就是委托的一种形式。以后会自学下事件,然后再来分项。

4.3 其它的我不知道的使用场景

时间: 2024-08-01 16:52:59

窗体间传值(委托)的相关文章

C# winform窗体间传值(使用委托或事件)

窗体间传值 今天得空,刚好看到网上好多人再找winform窗体间传值的问题,由于昨天项目的优化的感觉不错,就写了个C# winform窗体间传值的demo,希望能给需要的人的带来帮助: 工程的源代码地址:https://github.com/yes-or-no/WinFormTransValueDemoByDelOrEvent.git C#winform窗体间传值,三种方法示例,注释详细.使用方法:使用vs2013打开编译运行即可: 工程中总共介绍了三种方法:###方法1:通过保存对象的引用调用

委托——窗体间传值150525

委托总结 //总结 //和outputTime();表达一样,编译器会把outputTime();编译成outputTime.Invoke(); //1 定义委托数据类型 //2 定义委托变量 //3 判断委托类型是否存在,使用委托 //if (outputTime != null) // { // //和outputTime();表达一样,编译器会把outputTime();编译成outputTime.Invoke(); // outputTime.Invoke(); // } // 文件写入

C#窗体间传值方法总结

假设我们需要点击主窗体FMMain中的某一个按钮时打开子窗体FMChild并将某一个值传给子窗体FMChild,一般情况下,我们点击按钮显示子窗体FMChild的代码为: FMChild fmChild = new FMChild(); fmChild.ShowDialog(); fmChild.Dispose(); 如果我们需要将主窗体FMMain中的string strValueA的值传给FMChild,那么我们首先对strValueA进行如下处理: private string strVa

C# 窗体间传值方法大汇总

第一种方法:创建一个类,里面声明用于存储接收的字段.传的时候存储于字段中,要用的时候,直接类名.字段名 进行调用.(这种方法传递是双向的) 第二种方法:1.在Form1里定义 public string Name = "*****" 2. 在Form2里创建Form1对象, Form1 f = new Form1(); 然后就可以通过f.Name取值了 第三种方法:用构造函数在窗体Form2中 int value1; string value2; public Form2 ( int 

WinForm窗体显示和窗体间传值[转载]

以前对WinForm窗体显示和窗体间传值了解不是很清楚 最近做了一些WinForm项目,把用到的相关知识整理如下 A.WinForm中窗体显示 显示窗体可以有以下2种方法: Form.ShowDialog方法 (窗体显示为模式窗体) Form.Show方法 (窗体显示为无模式窗体) 两者具体区别如下: 1.在调用Form.Show方法后,Show方法后面的代码会立即执行 2.在调用Form.ShowDialog方法后,直到关闭对话框后,才执行此方法后面的代码 3.当窗体显示为模式窗体时,单击“关

winform 窗体间传值

WinForm 两窗体之间传值实例 2010-12-27 22:10:11|  分类: 学业|举报|字号 订阅 下载LOFTER我的照片书  | 窗体Form1和Form2 Form2由Form1打开(1.模式窗体 2.非模式) Form2的TextBox值传回Form1的TextBox中 Form1:       public partial class Form1 : Form         {             public Form1()             {       

不同窗体间传值

一:运行前后截图,实现功能将子窗体的lable的text值取出来给父窗体的lable的text 二:全部代码 a,父窗体 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; names

C# 窗体间传值方法大汇总(转)

第一种方法:创建一个类,里面声明用于存储接收的字段.传的时候存储于字段中,要用的时候,直接类名.字段名 进行调用.(这种方法传递是双向的) 第二种方法:1.在Form1里定义 public string Name = "*****" 2. 在Form2里创建Form1对象, Form1 f = new Form1(); 然后就可以通过f.Name取值了 第三种方法:用构造函数在窗体Form2中 int value1; string value2; public Form2 ( int 

窗体间传值(转载)尚待考证

窗体间传值要弄清楚到底是哪个对象的问题,否则容易传错值.就比如窗体对象loginFrm为登陆窗体,想把当前的登陆用户信息传递给主窗体mainFrm,但是却实例了一个新的对象loginFrm把里头的信息传递给了mainFrm,所以得到了一空值,颇有刻舟求剑的味道,不同的内存空间就比如湖水的宽广一样,存放着不同的对象,彼此要分清楚.窗体传值的前提是,要传的字段,在类里面的访问修饰符必须是public(如果在源窗体内传值则例外,参见下列常用方法2).常用的方法:1.    静态变量,在窗体里Class

C#父、子窗体间传值等

这是老生常谈的一个问题,百度上太多方法了,对错先不说.只想介绍最简单.明了的方法 这里介绍两种方法: 1.无参 2.有参 前提: 1.不管什么方法,窗体间传值,要被调用 的方法.控件.函数等等,修饰符都要先设置为Public 2.新建父.子两个窗体 主窗体 Main: 子窗体 Child: 一,无参(大部分人喜欢用这种) 只介绍一点:Owner属性,VS的解释:获取或者设置拥有此窗体的窗体   ,换种通俗的说法,说明它支持读取和修改. Main后台代码: namespace MainChild