关于C#winform窗体之间的传值有以下几种做法

1 通过构造函数传值

2 属性传值

以上两种方法不早详细介绍。

3 通过事件传值,委托传值

首先看一下通过委托传值吧。

1,创建两个窗体,分别是Form1和Form2

在Form1中添加一个Button按钮和一个TextBox控件,当单击button控件的时候new一个Form2对象,并且弹出窗体2

因此给button添加一个Click事件

2,在Form1窗体中,添加一个ShowText方法,用于给Form1中TextBox控件赋值

3,在项目中添加一个声明一个委托变量,没有返回值,并且有个参数MyDelText(string str)

4,在Form2窗体中添加一个button按钮和一个TextBox文本框,当单机Button按钮时,将文本框中的值传给Form1,在Form1

中的文本框中显示

给button添加一个click事件用于传值,并且在form2类中添加一个MyDelText类型的字段

5,在Form1单击事件中,通过声明的Form2对象,调用MyDelText类型的字段,给其注册方法

6,在Form2单击事件中执行委托

代码如下

1,准备Form1

using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace 窗体之间传值委托事件
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
//注册方法
f2.deltxt = ShowTxt;
}
//准备方法
public void ShowTxt(string str)
{
txt1.Text = str;
}
}
}

2,声明一个没有返回值,但是有一个参数的委托类型MyDelText.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 窗体之间传值委托事件
{
public delegate void MyDelText(string str);
}

3,准备Form2

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace 窗体之间传值委托事件
{
public partial class Form2 : Form
{
//创建委托变量
public MyDelText deltxt;
public Form2()
{
InitializeComponent();
} private void btn2_Click(object sender, EventArgs e)
{
//执行方法
deltxt(txt2.Text);
}
}
}

以上便是通过委托进行窗体之间的传值,其实最主要的思想就是,把方法当做变量进行传递,在form1中给委托注册方法,在form2中调用通过委托变量调用方法。

但是上面这种通过委托进行传值存在的弊端就是,存在多播委托的弊端,还有就是存在盗用问题,在form1中进行注册完方法,还可以继续注册一个方法,把刚刚注册的方法

覆盖掉,或者注册完方法,在form1中直接执行,因此产生了事件,将在form2中声明的委托字段,变成public event MyDelText del;就OK了

总结:

事件就是阉割后的委托变量,事件的订阅者只能订阅,播放者才有权利执行

C# Winform中的窗体传值的更多相关文章

  1. WinForm中一个窗体调用另一个窗体

    [转] WinForm中一个窗体调用另一个窗体的控件和事件的方法(附带源码) //如果想打开一个 Form2 的窗体类,只需要: Form2 form = new Form2(); //有没有参数得看 ...

  2. Winform开发之窗体传值

    Winform的窗体之间的数据传递是开发的必备技术,下面介绍几种典型的传值方法 1.构造函数传值,但这种方法是单向的(推荐) 上代码,先传值 private void button2_Click(ob ...

  3. winform中设置窗体的默认焦点

    winform的窗体中,有时候需要设置默认焦点,有时候需要取消默认焦点. 设置默认焦点,最简单的方法就是设置这个控件的tabIndex,例:textBox1.TabIndex = 0; 也可以在窗体事 ...

  4. Winform中的窗体一些常用属性

    Winform窗体的常用窗体属性 1)窗体全屏显示 this.DesktopBounds = Screen.GetWorkingArea(this);  //全屏显示桌面 注:可以放在初始化方法中,也 ...

  5. 20150214—winform中使用构造函数传值

    构造函数,在函数初始化时就会执行的函数方法,在创建一个类之后,系统会自动在此类中生成一个与类名相同的函数,其中只包含一句代码: InitializeComponent(); 新建一个名字相同的函数,然 ...

  6. winform 中设置窗体的默认焦点

    转载:http://www.cnblogs.com/weekzero/p/3504513.html winform的窗体中,有时候需要设置默认焦点,有时候需要取消默认焦点. 设置默认焦点,最简单的方法 ...

  7. c# winform中预防窗体重复打开

      当窗体以非模态形式打开的时候,有可能出现重复打开的情形,利用以下的代码可以预防重复打开! foreach (Form f in Application.OpenForms) { if (f.Nam ...

  8. WinForm开发,窗体显示和窗体传值相关知识总结

    主窗体中代码: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void b ...

  9. CS中委托与事件的使用-以Winform中跨窗体传值为例

    场景 委托(Delegate) 委托是对存有某个方法的引用的一种引用类型变量. 委托特别用于实现事件和回调方法. 声明委托 public delegate int MyDelegate (string ...

随机推荐

  1. Chrome 下动画卡顿问题的另一种可能

    [现象] 动画出现了明显的卡顿,且仅仅出现在 chrome 中. [原因排查] 一开始使用了css动画的时候已经出现了卡顿.找到如下的文章:CSS3 动画卡顿解决方案.深入浏览器理解CSS anima ...

  2. 使用Func<>和Action简化委托

    /// <summary> /// 入口 /// </summary> public void Run() { TestDelegate t = test; t(); Acti ...

  3. windows phone 8.1 FlipView 实现照片自动浏览

    FlipView 控件也是一个集合控件,不过它和ListView等控件不同,ListView控件是一次显示多个项,而FlipView则是每次只显示一个项.在windows phone上通过默认的左右滑 ...

  4. IOS百度地图之--->第一篇《环境配置与基本使用》

    Ios 百度地图SDK简易使用说明:http://developer.baidu.com/map/index.php?title=iossdk 先道歉:对于原来上传的Demo我很抱歉,什么都没有,也没 ...

  5. Centos7忘记密码

    CentOS 7 root密码的重置方式和CentOS 6完全不一样,CentOS 7与之前的版本6变化还是比较大的,以进入单用户模式修改root密码为例. 1.重启开机按esc 2.按e 3.编辑修 ...

  6. redux核心思路和代码解析

    最近在公司内部培训的时候,发现很多小伙伴只是会用redux.react-redux.redux-thunk的api,对于其中的实现原理和数据真正的流向不是特别的清楚,知其然,也要知其所以然,其实red ...

  7. xgboost-python参数深入理解

    由于在工作中应用到xgboost做特征训练预测,因此需要深入理解xgboost训练过程中的参数的意思和影响. 通过search,https://www.analyticsvidhya.com/blog ...

  8. strspn 和strcspn

    1.strcspn头文件:#inclued<string.h>定义函数:size_t strcspn(const char *s, const char * reject);函数说明:st ...

  9. webstorm中关于vue的一些问题

    在进行vue开发中,我使用了webstorm,但是过程坎坷艰辛,遇到了很多问题,我将问题和解决方案贴上,以作参考. 1.vue项目部署在webstorm中,第一个遇到的问题是,webstorm卡住了, ...

  10. PRINCE2有用吗?

    PRINCE2项目认证--在欧美国际久负盛名,在国内近来才逐渐为业内人士所了解.PRINCE2认证2007年首入中国,目前国内参加培训并获取认证的专业人士不足五万人,PRINCE2全称为"受 ...