窗体间传递数据

前言

  做项目的时候,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,一经查实,立即删除!

相关文章

[转载] c语言中检查命令行参数_C中的命令行参数

参考链接: Java中的命令行参数 c语言中检查命令行参数 Command line argument is a parameter supplied to the program when it is invoked. Command line argument is an important concept in C programming. It is mostly used when you need to control your …

MySQL关闭Enterprise Server源码

今天从MySQL官方网站上获知,MySQL宣布关闭Enterprise Server的源码,对于广大开源爱好者来说,这是一个沉重的打击。虽然免费的用户群体一般仅仅使用MySQL Community Server(开源免费社区版),但关闭MySQL Ent…

[转载] Java中Scanner用法总结

参考链接: Java之Scanner类 最近在做OJ类问题的时候,经常由于Scanner的使用造成一些细节问题导致程序不通过(最惨的就是网易笔试,由于sc死循环了也没发现,导致AC代码也不能通过。。。),因此对S…

os和shutil模块

import os //os模块基本实现了linux系统中所有的命令 os.system(终端命令):在终端执行命令 os.getcwd():获取当前的工作路径 os.chdir():修改工作路径 os.chmod():修改权限 os.chown():修改属主属组 os.mkdir():创建单个目录,当目录存在时报异常&…

[转载] JAVA语言程序设计(基础篇)第十版课后题答案(第一章)

参考链接&#xff1a; Java中的Scanner和nextChar() JAVA语言程序设计&#xff08;基础篇&#xff09;第十版课后题答案 第一章 第二题 /** Created by ysy on 2018/7/6. */ public class text2 { public static void main(String[] args){ for(int i 0; i < 5; i) Syste…

java.util.Date和java.sql.Date 一点区别

最近无意中发现&#xff0c;在oracle中同一样的一个Date类型字段&#xff0c;存储的日期格式有两种不同的情况&#xff0c;第一种是2011-1-1 12:00:00&#xff0c;第二种是2011-1-1&#xff0c;仔细查找发现在向数据库中写数据的时候定义的变量的问题。 第一种是&#xff1a;ja…

[转载] java中关于用\t格式输出

参考链接&#xff1a; 用Java格式化输出 看了好多人关于\t的用法&#xff0c;感觉找不到自己想要的答案&#xff0c;所以索性就自己输出来看看&#xff0c;如图&#xff1a;这样可以一目了然的看出来&#xff0c;\t&#xff08;制表符&#xff09;的作用就是看前面输出满不满8…

微信抢房软件开发

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

[转载] Java——数组习题

参考链接&#xff1a; Java从控制台读取输入的方法 package chap02; import java.util.Scanner; /** * * author admin * date 2020-4-8 * description: * 题目内容&#xff1a; 编写程序&#xff0c; 从控制台读取下面的信息&#xff0c; 每月按22天工作日计算&#xff0c;…

超全Linux备份工具集合,满足你的所有需要!

经常备份计算机上的数据是个好的做法&#xff0c;它可以手动完成&#xff0c;也可以设置成自动执行。许多备份工具拥有不同的功能特性&#xff0c;让用户可以配置备份类型、备份时间、备份对象、将备份活动记入日志及执行更多操作。 1.Rsync这是一款在Linux用户当中颇受欢迎的命…

[转载] Java内存管理-你真的理解Java中的数据类型吗(十)

参考链接&#xff1a; Java中的字符串类String 1 做一个积极的人 编码、改bug、提升自己 我有一个乐园&#xff0c;面向编程&#xff0c;春暖花开&#xff01; 推荐阅读 第一季 0、Java的线程安全、单例模式、JVM内存结构等知识梳理 1、Java内存管理-程序运行过程&#x…

Linux系统安全加固脚本

闲来无事&#xff0c;整理一个系统安全加固脚本&#xff0c;每个公司的要求不一样&#xff0c;所以仅供参考&#xff1a; #!/bin/sh echo "00 */1 * * * /usr/sbin/ntpdate 192.168.1.1 >>/var/log/ntpdate.log" > mycrontab crontab mycrontab rm -rf my…

[转载] 整理下java中stringBuilder和stringBuffer两个类的区别

参考链接&#xff1a; Java中的StringBuffer类 StringBuilder和StringBuffer这两个类在动态拼接字符串时常用&#xff0c;肯定比String的效率和开销小&#xff0c;这是因为String的对象不会回收哦。 其实我一直用StringBuilder这个类&#xff0c;因为可以简写为sb的变量在程序…

11.13 模10计数器设计

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

[转载] java对象在内存中的结构

参考链接&#xff1a; 了解Java中的类和对象 今天看到一个不错的PPT&#xff1a;Build Memory-efficient Java Applications&#xff0c;开篇便提出了一个问题&#xff0c;在Hotspot JVM中&#xff0c;32位机器下&#xff0c;Integer对象的大小是int的几倍&#xff1f; 我们…

使用valueOf前必须进行校验

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

[转载] 【Java】Java基础知识及其扩展笔记(8千字)

参考链接&#xff1a; Java中的StringBuilder类及其示例 Java基础知识及其扩展笔记 零 l 写在前面一 l JVM1、【1.1.2.1】java程序运行的一般流程2、【1.1.2.1】JVM一般运行流程3、【1.1.2.1】JIT&#xff08;just in time 即时编译编译器&#xff09;4、堆与栈 二 l Java …

多IDC GSLB的部署

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

[转载] Controller报错:java.lang.NoSuchMethodException: java.util.List.<init>()

参考链接&#xff1a; Java8中的java.util.StringJoiner 报错详情&#xff1a; java.lang.NoSuchMethodException: java.util.List.<init>() 以及 No primary or default constructor found for interface java.util.List 示例&#xff1a; /** * 此接口会产生以…

[转载] 算法竞赛中的JAVA使用笔记

参考链接&#xff1a; Java中StringTokenizer类的示例| 1(构造函数) 算法竞赛中的JAVA使用笔记 算法竞赛中的JAVA使用笔记 输入与输出 基本输入输入挂输出控制台输入输出重定向到文件 大整数与高精度 大整数BigInteger高精度BigDecimal高精度开方 字符串与进制转换 字符串基本…