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 ...
随机推荐
- php中数据库服务器连接类库文件的编写
<!--数据库服务器连接类库文件的编写--> <?php class mysql{ //连接服务器.数据库以及执行Sql语句的类库 public $database; public ...
- linux yum下载文件的存放位置
默认是: /var/cache/yum也可以在 /etc/yum.conf 指定cachedir=/var/cache/yum #存放目录keepcache=1 #1为保存 0为不保存metadata ...
- Java基础一:面向对象的特征
经过16年校招,自己在Java基础方面也算有了一个质的飞跃,从原来知其然,到现在知其所以然,现将学习心得总结于此. 首先需要知道类和对象是什么? 维基百科定义类为: an extensible pro ...
- 微信JS图片上传与下载功能--微信JS系列文章(三)
概述 在前面的文章微信JS初始化-- 微信JS系列文章(一)中已经介绍了微信JS初始化的相关工作,接下来本文继续就微信JS的图片上传功能进行描述,供大家参考. 图片上传 $(function(){ v ...
- Myeclipse Java项目转换成Maven项目
1.在Eclipse中Java项目转换成Maven项目可以在项目右键-->configure-->Convert Plug-in projects.. 就可以.而在myeclipse中项 ...
- vuejs模板使用方法
vuejs的模板功能很强大,下面是一些demo <!DOCTYPE html> <html lang="en"> <head> <meta ...
- mybatis generator 插件安装及使用
现在Mybatis特别火,但是在开发中却要经常写实体类和配置文件,会不会特别烦人,所以可以利用Mybatis的代码生成插件来生成这部分代码: 1,打开eclipse,点击Help>Softwar ...
- 我是如何处理大并发量订单处理的 KafKa部署总结
今天要介绍的是消息中间件KafKa,应该说是一个很牛的中间件吧,背靠Apache 与很多有名的中间件搭配起来用效果更好哦 ,为什么不用RabbitMQ,因为公司需要它. 网上已经有很多怎么用和用到哪的 ...
- Java并发编程:同步锁、读写锁
之前我们说过线程安全问题可以用锁机制来解决,即线程必要要先获得锁,之后才能进行其他操作.其实在 Java 的 API 中有这样一些锁类可以提供给我们使用,与其他对象作为锁相比,它们具有更强大的功能. ...
- Android使用本地广播
Android本地广播学习中一直被忽略,今天用到了,Mark一下 1.本地广播的定义和普通广播一样 例如 public class WakeTimesBroadcastReceiver extends ...