窗体间传递数据

前言

  做项目的时候,winfrom因为没有B/S的缓存机制,窗体间传递数据没有B/S页面传递数据那么方便,今天我们就说下winfrom中窗体传值的几种方式。

共有字段传递

  共有字段传递实现起来很方便,就是在窗体类中加个共有字段属性:

复制代码
1         public string Msg
2         {
3             get 
4             {
5                 return this.textBox1.Text.Trim();
6             }
7         }
复制代码

  调用代码:

复制代码
1         public Form2(Form1 f1)
2         {
3             InitializeComponent();
4             this.label1.Text = f1.Msg;
5         }
复制代码

  就这么简单,共有字段传递其实只是一种可以传递数据的方式,但不希望采用这种方式,除非一些窗体是要做传值的,比如一些信息弹窗,可以采用这种方式。

构造传递

  构造传递一般是我们做项目常用的一种,就像对象传值一样,我们只要在构造方法中添加参数即可。

复制代码
 1         public Form2(string msg)
 2         {
 3             InitializeComponent();
 4             this.label1.Text = msg;
 5         }
 6 
 7         private void button1_Click(object sender, EventArgs e)
 8         {
 9             Form2 f2 = new Form2(this.textBox1.Text.Trim());  //调用
10             f2.Show();
11         }
复制代码

委托与事件传递

  上面说的两种方式都是由父窗体传值给子窗体,还有一种方式是子窗体传值给子船体,这种方式一般采用委托和事件传递,我们来做个示例看下。

  我们先建一个委托,参数是string:

1     public delegate void selectChangedHandler(string s);

  在传值中我们需要第二种方式来传递一个对象集合,首先我们建一个数据传递集合:

复制代码
 1     public class CallObject
 2     {
 3         public string callMessage = "";
 4         public event selectChangedHandler selectChangedEvent;
 5 
 6         public void callEvent(string s)
 7         {
 8             this.selectChangedEvent(s);
 9         }
10     }
复制代码

  集合包含两个部分,一个是返回信息对象,一个是事件对象,这些其实以便子窗体调用来得到从子窗体中传递过来的数据,事件定义好了就得有事件处理方法:

1         public void co_selectChangedEvent(string s)
2         {
3             this.txtF2Select.Text = s;
4         }

  我们看下父窗体的调用方法:

复制代码
1         private void btnCallForm2_Click(object sender, EventArgs e)
2         {
3             CallObject co = new CallObject();
4             co.selectChangedEvent+=new selectChangedHandler(co_selectChangedEvent);
5             Form2 f2 = new Form2(co);
6 
7             f2.ShowDialog();
8             txtEventResult.Text = "Form2传的信息:" + co.callMessage;
9         }
复制代码

  这边主要是给事件注册,从父窗体中我们就可以推断出,子窗体是怎么调用的,通过构造方法得到对象集合,然后触发事件就可以了。

复制代码
 1         private CallObject co;
 2         public Form2(CallObject cov):this()
 3         {
 4             this.co = cov;
 5         }
 6 
 7         private void rb_A_CheckedChanged(object sender, EventArgs e)
 8         {
 9             co.callEvent("A");
10         }
复制代码

  运行效果:

  下面传值给父窗体的值需要关闭子窗体,父窗体再可以得到,上面的可以实时传递。

  程序下载:窗体间传递数据.rar

  附录:小菜学习编程-Winform系列(初学者)

后记

  其实上面第一种并不能说是一种好的方式,就像说模式,常用并且可以解决问题的解决方案称为模式,开门有几种方式:拿钥匙开门和撬门,我们常用的是第一种,并称为一种开门模式,并不是说第二种就不是了,只不过我们不常用,适合一些特殊的情况,比如,忘记拿钥匙了,就是这个意思。

 


本文转自田园里的蟋蟀博客园博客,原文链接:http://www.cnblogs.com/xishuai/p/3549242.html,如需转载请自行联系原作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/540239.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信抢房软件开发

2019独角兽企业重金招聘Python工程师标准>>> 这两年楼市真可谓是一个"火“字难以形容 经历了长沙两次开盘,都没有抢到,目前还没有买到房子,说说我的悲剧吧,让大伙都开心开心 第一次抢房是今年4月份长沙万科金域国…

11.13 模10计数器设计

.新建一个工程 Family:FLEX10K Available device:EPF10K20TC144-3 2.设置lpm_counter宏单元参数并连接引脚 连接引脚的时候要注意的是,向量线的连接。 3.时序仿真 检查无误后进行下一步 4.载入7448并进行引脚连接 5.分配管脚 再次编译&#x…

使用valueOf前必须进行校验

每个枚举都是java.lang.Enum的子类,都可以访问Enum类提供的方法,比如hashCode(),name(),valueOf()等..... 其中valueOf()方法会把一个String类型的名称转变为枚举项,也就是枚举项中查找出字面值与该参数相等的枚举项,虽然这个方法很简单,但是JDK却做了一个对于开发人员来说并不…

多IDC GSLB的部署

之前已经介绍过GSLB的实现原理,这里再向大家讲述一下GSLB经常遇到的部署方式,多IDC的部署。很多大型的企业或业务容灾要求非常高的客户都会部署有多个异地的数据中心,以保证其业务的“全天候”不间断的正常运行,而要整合多个IDC的…

信息系统开发平台OpenExpressApp:【OpenTest】 之 语法及其使用介绍

在OpenTest 之 运行环境准备中介绍了运行自动化测试需要做的一些准备工作,本篇将继续给大家介绍OpenTest的脚本语法以及使用方法,通过学习后读者应该能够开始动手编写UI自动化测试脚本了。 关键字驱动测试 在学习语法之前,需要了解一下关键字…

Oracle 10g 高级安装图文教程(二)

第八步:为了简便起见(工作中肯定不安全),选择“所有的帐户都是用同一个口令”,并输入口令,点击“下一步”:本文转自 victoryan 51CTO博客,原文链接:http://blog.51cto.com/victoryan…

Gram matrix 格拉姆矩阵

2019独角兽企业重金招聘Python工程师标准>>> Gram matrix 度量各个维度自己的特性以及各个维度之间的关系。 来自:https://www.zhihu.com/question/49805962?fromprofile_question_card 由感知机(对偶感知机中需要计算样本点两两之间的内积和…

MySQL日常应用操作记录

1.知道一个字段名,怎样查到它在数据库里的哪张表里? USE Information_schema;SELECT TABLE_NAME FROM COLUMNS WHERE COLUMN_NAME字段名称; MySQL中查看库表字段信息都在information_schemal中,获取数据字典等信息都要通过这个视图。 如&…

如果只做前端验证的话,谈jjdd.com的看照片功能。

如果你在上海,并且坐过地铁的话,你肯定知道jjdd.com。 这个网站和百合,世纪佳缘类似,都是交朋友的性质。 在jjdd.com中有个很重要的功能:如果你上传的照片比你想看的人少的话,你是不能看她的照片的。 例如如…

升级PowerShell至4.0版本

为了更好的使用Cmder v1.2,不得不升级PowerShell为4.0。 不知道Cmder的,可以点击这里:https://github.com/cmderdev/cmder 和 逆天神器 cmder。 Powershell是运行在Windows机器上实现系统和应用程序管理自动化的命令行脚本环境。 需要.NET环境…

备忘(持续更新。。。)

1、在springmvc这个框架里面,创建新的业务逻辑层,dao、service层至少需要一个接口,项目才能跑起来 2、获取当前用户桌面路径 File desktopDir FileSystemView.getFileSystemView() .getHomeDirectory();String desktopPath desktopDir.getA…

SQL PASS西雅图之行——签证篇

本人有幸通过IT168&itpub的站庆活动http://www.itpub.net/thread-1716961-1-1.html,并应微软邀请参加了在西雅图举办的The Conference for SQL Server Professionals(简称SQL-PASS)。 SQL-PASS会议计划于2012年11月6日-9日举行&#xff0…

11.python并发入门(part5 event对象)

一、引入event。 每个线程,都是一个独立运行的个体,并且每个线程的运行状态是无法预测的。 如果一个程序中有很多个线程,程序的其他线程需要判断某个线程的运行状态,来确定自己下一步要执行哪些操作。 threading模块中的event对象…

俞永福卸任阿里大文娱董事长,改任 eWTP 投资组长

两天前(11月13日),阿里文娱董事长俞永福离职的消息,在互联网圈炸了锅。但很快,俞本人就在微博做了澄清,并称“永远幸福,我不会离开”。然而就在今天(11月15日)&#xff0…

Linux查看系统cpu个数、核心书、线程数

Linux查看系统cpu个数、核心书、线程数 现在cpu核心数、线程数越来越高,本文将带你了解如何确定一台服务器有多少个cpu、每个cpu有几个核心、每个核心有几个线程。 查看物理cpu个数 cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l 查看核…

Linux基础篇_01_计算机概论

学习资料:《鸟哥的Linux私房菜(基础篇)》部分:Linux的规划与安装 时间:20130225 学习笔记:计算机定义:接受使用者输入指令与数据, 经由中央处理器的数学与逻辑单元运算处理后&#x…

[3/21]Windows Server 2008时钟方面的改进展示

在Windows Server 2008中的时钟显示和以往Windows Server 2003及以前的版本显示有很大的差别。如果要显示并进行简单的时间修改可以在时钟上双击,会出现如下图所示的界面。在上图中可以调整但无法进行真正的修改,彻底修改需要点击"更改日期和…

2Python全栈之路系列之MysQl基本数据类型

Python全栈之路系列之MySQL基本数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的。 MySQL支持多种类型,大致可以分为三类: 数字类型 日期和时间类型 字符串类型 数字类型 类型大小用途BIT-二进制TINYINT1字节小整数值INT or INTEGER4字…

VDI序曲二 RemotoAPP部署

首先,我们需要准备如下角色:沿用VDI序曲一的2台物理服务器以及角色我们在物理服务器1的hyper-v上,我们利用之前我介绍的“服务器虚拟化之准备母盘VHD”的方法再创建如下虚拟机:WIN-RDAPP;WIN-RDWA;WIN-RDCB…

多任务管理类 MutilTaskManager

计算和计算所需的数据能被较为平均的非配到若干task的时候,下面的任务管理类可以提供在大数据大计算量的情况下非精确的控制task的执行数量来限制计算量和内存占用量.下面是代码(非线程安全版本): public class MutilTaskManager{…