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 ...
随机推荐
- @PostConstruct 注解
@PostConstruct 注解 /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. ...
- Opencv2.4.13 与Visual Studio2013 环境搭建配置
opencv这个工具来进行图像处理.大致是使用C++语言编写程序实现识别算法的实现,所以首先就要进行opencv与VS环境的配置. Shaine属于那种半路出家之人都算不上的那种,本科期间三四 ...
- 使用Func<>和Action简化委托
/// <summary> /// 入口 /// </summary> public void Run() { TestDelegate t = test; t(); Acti ...
- 【Unity优化】如何实现Unity编辑器中的协程
Unity编辑器中何时需要协程 当我们定制Unity编辑器的时候,往往需要启动额外的协程或者线程进行处理.比如当执行一些界面更新的时候,需要大量计算,如果用户在不断修正一个参数,比如从1变化到2,这种 ...
- java学习(二)多态中成员变量详解
今天我总结了一下java多态中成员变量的赋值与调用 举一个我当初做过的小案例: class Fu{ int num; void show(){} } class Zi extends Fu{ //in ...
- 用webstorm自动编译less产出css和sourcemap
css产出sourcemap有什么用呢,可能大家要问这个问题了. 请移步这里 https://developers.google.com/chrome-developer-tools/docs/css ...
- python服务器环境搭建(3)——参数配置
前面我们已安装好了python服务器运行所需要的相关软件,而最重要最繁琐的就是参数配置,写这篇就踩了好多坑,花了好多时间,遇到了各种各样的问题.好了费话少说,直接进入本篇话题. PS:本人不是专业的运 ...
- 【JavaWeb】Session(转)
Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自 ...
- 利用php数组函数进行函数式编程
因为一个BUG, 我在一个摇摇欲坠,几乎碰一下就会散架的项目中某一个角落中发现下面这样一段代码 这段程序与那个BUG有密切的关系. 我来回反复的捉摸这段代码, 发现这段代码实现了两个功能 第一个是在一 ...
- TableView cell自适应高度-----xib
1.通过xib创建一个cell,将label进行上左下右,进行适配, self.automaticallyAdjustsScrollViewInsets = NO; self.edgesForExte ...