C# Winform中的窗体传值
关于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中的窗体传值的更多相关文章
- WinForm中一个窗体调用另一个窗体
[转] WinForm中一个窗体调用另一个窗体的控件和事件的方法(附带源码) //如果想打开一个 Form2 的窗体类,只需要: Form2 form = new Form2(); //有没有参数得看 ...
- Winform开发之窗体传值
Winform的窗体之间的数据传递是开发的必备技术,下面介绍几种典型的传值方法 1.构造函数传值,但这种方法是单向的(推荐) 上代码,先传值 private void button2_Click(ob ...
- winform中设置窗体的默认焦点
winform的窗体中,有时候需要设置默认焦点,有时候需要取消默认焦点. 设置默认焦点,最简单的方法就是设置这个控件的tabIndex,例:textBox1.TabIndex = 0; 也可以在窗体事 ...
- Winform中的窗体一些常用属性
Winform窗体的常用窗体属性 1)窗体全屏显示 this.DesktopBounds = Screen.GetWorkingArea(this); //全屏显示桌面 注:可以放在初始化方法中,也 ...
- 20150214—winform中使用构造函数传值
构造函数,在函数初始化时就会执行的函数方法,在创建一个类之后,系统会自动在此类中生成一个与类名相同的函数,其中只包含一句代码: InitializeComponent(); 新建一个名字相同的函数,然 ...
- winform 中设置窗体的默认焦点
转载:http://www.cnblogs.com/weekzero/p/3504513.html winform的窗体中,有时候需要设置默认焦点,有时候需要取消默认焦点. 设置默认焦点,最简单的方法 ...
- c# winform中预防窗体重复打开
当窗体以非模态形式打开的时候,有可能出现重复打开的情形,利用以下的代码可以预防重复打开! foreach (Form f in Application.OpenForms) { if (f.Nam ...
- WinForm开发,窗体显示和窗体传值相关知识总结
主窗体中代码: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void b ...
- CS中委托与事件的使用-以Winform中跨窗体传值为例
场景 委托(Delegate) 委托是对存有某个方法的引用的一种引用类型变量. 委托特别用于实现事件和回调方法. 声明委托 public delegate int MyDelegate (string ...
随机推荐
- ps-色彩饱和度的设计
1- 图层区—复制背景图层 防止原图修改失败后无法还原 2- 选项区——选择—色彩范围 以色彩为标准来对图片进行选区 3- 点击图片上 ...
- dreamweaver中的 map怎么调用?_制作热点图像区域
我们浏览网页时,经常看到一些图片上会出现特别的超链接,即在一张图片上有多个局部区域和不同的网页链接,比如地图链接. 这就是映射图像(Image Map),它是指一幅根据链接对象不同而被人为划分为若干指 ...
- rsync (windows 服务端,linux客户端)将windows上的数据同步到linux服务器,反之也可
一:总体概述. 1.windows上面首先装CW_rsync_Server.4.1.0_installer,安装时要输入的用户名密码要记住哦!接下来就是找到rsyncd.conf进入配置细节 2.li ...
- 使用Func<>和Action简化委托
/// <summary> /// 入口 /// </summary> public void Run() { TestDelegate t = test; t(); Acti ...
- nmap安装过程
nmap是一个网络扫描和主机检测工具. 功能:1.扫描目标主机开放的端口 2.扫描目标主机特定端口是否关闭 3.路由跟踪(到目标主机所经过的网络节点及其通过时间) 4.扫描一个网段下的所有IP 5.探 ...
- 使用Android Studio导入第三方库项目
在使用Android Studio开发时,用到了第三方库SlidingMenu(现在已经不推荐使用了),尽管如此,但具体怎么导入第三方库还是需要知道的,在查阅各种资料后,知道了一种比较容易可行的方法 ...
- CDMA sid, nid, bid 含义解释
copyright@ celldb.cc SID 是系统识别码,每个地级市只有一个sid,是唯一的. NID是网络识别码,由各本地网管理,也就是由地级分公司分配.每个地级市可能有1到3个nid. BI ...
- MySQL1236错误的恢复
从库出现问题 mysql> show slave status\G; *************************** . row *************************** ...
- 浩哥解析MyBatis源码(三)——Transaction事务模块
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6634151.html 1.回顾 之前介绍了Environment环境类,这其实是一个单例类 ...
- Cassandra存储time series类型数据时的内部数据结构?
因为我一直想用Cassandra来存储我们的数字电表中的数据,按照之前的文章(getting-started-time-series-data-modeling)的介绍,Cassandra真的 ...