C#窗体间常用的几种传值方式、以及委托与事件的详细介绍
窗体间的传值,最好使用委托方式传值,开始之前,我们先来说一下委托与事件的关系。
委托:是一个类。
事件:是委托类型的一个特殊实例,只能在类的内部触发执行。
首先创建2个窗体,这里我们以form1为发送窗体,form2为接收窗体
form1窗体

form2窗体

方式一(最简单的方式)
form1窗体代码
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 Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public Form2 msgFrm { get; set; }
private void Form1_Load(object sender, EventArgs e)
{
Form2 f2 = new Form2();
msgFrm = f2;
f2.Show();
} private void btnSendMsg_Click(object sender, EventArgs e)
{
//对象内部的,字段或者元素属性最好不要直接让外部直接访问
//最好是通过,设置的方法来控制一下
msgFrm.SetTxt(this.txtMsg.Text); }
}
}
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 Form2()
{
InitializeComponent();
}
public void SetTxt(string txt)
{
this.txtMsg.Text = txt;
}
}
}
方式二(委托方式)
注:委托不熟悉的宝宝们,请自行查阅Func与Action,以及delegate三者区别,这里我们用系统内置的委托Action
form1窗体代码
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 Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//定义委托
public Action<string> afterMsgSend { get; set; }
private void Form1_Load(object sender, EventArgs e)
{
Form2 f2 = new Form2();
afterMsgSend += f2.SetTxt; //给系统内置的委托注册事件
f2.Show();
} private void btnSendMsg_Click(object sender, EventArgs e)
{
if (afterMsgSend == null)
{
return;
}
afterMsgSend(this.txtMsg.Text);
}
}
}
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 Form2()
{
InitializeComponent();
}
public void SetTxt(string txt)
{
this.txtMsg.Text = txt;
}
}
}
方式三(事件方式,更安全哟)
TextBoxMsgChangeEventArg类继承EventArgs代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 事件的方式实现窗体间传值
{
public class TextBoxMsgChangeEventArg:EventArgs
{
public string Text { get; set; }
}
}
form1窗体代码
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 Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public event EventHandler AfterMsgChange;
private void Form1_Load(object sender, EventArgs e)
{
Form2 f2 = new Form2();
AfterMsgChange += f2.AfterTxtChange;
f2.Show();
}
private void btnSendMsg_Click(object sender, EventArgs e)
{
AfterMsgChange(this, new TextBoxMsgChangeEventArg() { Text = this.txtMsg.Text });
}
}
}
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 Form2()
{
InitializeComponent();
}
public void AfterTxtChange(object sender,EventArgs e)
{
//拿到父窗体传来的文本,强转数据类型
TextBoxMsgChangeEventArg arg = e as TextBoxMsgChangeEventArg;
this.SetTxt(arg.Text);
}
}
}
还有不懂的宝宝们,欢迎下方留言~
C#窗体间常用的几种传值方式、以及委托与事件的详细介绍的更多相关文章
- Vue中常用的几种传值方式
Vue中常用的几种传值方式 1. 父传子 父传子的实现方式就是通过props属性,子组件通过props属性接收从父组件传过来的值,而父组件传值的时候使用 v-bind 将子组件中预留的变量名绑定为da ...
- Vue中常用的三种传值方式
父传子 父子组件的关系可以总结为prop向下传递,事件向上传递.父组件通过prop给子组件下发数据,子组件通过事件给父组件发送消息. 父组件: <template> <div> ...
- iOS 页面间几种传值方式(属性,代理,block,单例,通知)
第二个视图控制器如何获取第一个视图控制器的部分信息 例如 :第二个界面中的lable显示第一个界面textField中的文本 这就需要用到属性传值.block传值 那么第一个视图控制器如何获的第二个视 ...
- Vue 常用三种传值方式
Vue常用的三种传值方式: 父传子 子传父 非父子传值 引用官网一句话:父子组件的关系可以总结为 prop 向下传递,事件向上传递.父组件通过 prop 给子组件下发数据,子组件通过事件给父组件发送消 ...
- django之创建第7-6-第三种传值方式
1.创建bar.html文件 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- django之创建第7-5-第二种传值方式(time/1232/xiaodneg)
1.修改views文件 def foo(request,myID,myName): t = loader.get_template("foo.html") user = {&quo ...
- 【温故知新】——原生js中常用的四种循环方式
一.引言 本文主要是利用一个例子,讲一下原生js中常用的四种循环方式的使用与区别: 实现效果: 在网页中弹出框输入0 网页输出“欢迎下次光临” 在网页中弹出框输入1 网页输出“查询中……” 在 ...
- C#窗体间通讯的几种处理方法
应用程序开发中,经常需要多窗体之间进行数据通信,写几个例子,把几种常用的通信方式总结一下: 主窗体Form1是一个ListBox,单击选中某列时,弹出窗体Form2,Form2中两个控件,一个是Tex ...
- 浅谈Asp.Net中的几种传值方式
一.使用Querystring Querystring是一种非常简单的传值方式,其缺点就是会把要传送的值显示在浏览器的地址栏中,并且在此方法中不能够传递对象.如果你想传递一个安全性不是那么太重要或者是 ...
随机推荐
- 如何使用1行代码让你的C++程序控制台输出彩色log信息
本文首发于个人博客https://kezunlin.me/post/a201e11b/,欢迎阅读最新内容! colorwheel for colored print and trace for cpp ...
- RocketMQ 升级到主从切换(DLedger、多副本)实战
目录 1.RocketMQ DLedger 多副本即主从切换核心配置参数详解 2.搭建主从同步环境 3.主从同步集群升级到DLedger 3.1 部署架构 3.2 升级步骤 3.3 验证消息发送与消息 ...
- Use a Multiline Editor for String Properties 对字符串属性使用多行编辑器
In this lesson, you will learn how to display a multiline editor for string properties. For this pur ...
- vue-property-decorator使用指南
在Vue中使用TypeScript时,非常好用的一个库,使用装饰器来简化书写. 1.安装npm i -S vue-property-decorator @Prop @PropSync @Provide ...
- 个性化windows10主题/换成winxp主题
win10系统主题手动更换为仿winXp系统主题 突然想念家里那台被遗忘了好久的旧电脑,思绪被拉回小时候偷玩电脑的场景. 如果你也是一个念旧的人的话,我相信你一定喜爱Windows XP的经典界面. ...
- Dynamics 365应用程序池回收对连接造成的影响。
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 8. Vue - Router
一.Vue Router 的使用 JavaScript: 1.创建组件:创建单页面应用需要渲染的组件 2.创建路由:创建VueRouter实例 3.映射路由:调用VueRouter实例的map方法 4 ...
- Docker&K8S&持续集成与容器管理--系列教程
前言 网络虚拟化 一 Docker简介 Docker介绍 → B站视频链接 Docker架构 → B站视频链接 二 Docker安装 Ubuntu Docker 安装 CentOS Docker ...
- workbook数据相关操作
访问单个单元格 c = ws['A4'] #返回单元格A4,如果单元格不存在,则会自动创建 ws['A4'] = 4 #为单元格A4赋值为4 d = ws.cell(row=4, column=2, ...
- 【文本处理命令】之awk命令详解
一.awk命令简介 awk 是一种很棒的语言,它适合文本处理和报表生成,其语法较为常见,借鉴了某些语言的一些精华,如 C 语言等.在 linux 系统日常处理工作中,发挥很重要的作用,掌握了 awk将 ...