WinForm中窗体间传值(中间类)

简介: 一个稍微复杂一点的程序一般都有两个或者更多的窗体。有时在程序设计中,数据不仅要在同一个窗体中传递,还要在窗体间传递,尤其是用子窗体如何改变父窗体。这个问题已经不少人问过,在群里也为了那种方式好而争论过,昨天雨声.net问窗体间互操作的问题,让我萌生就这个问题写下这篇文章,希望对刚刚接触C#的朋友有所帮助,有疏漏之处,也希望朋友们指正,欢迎讨论。

一个稍微复杂一点的程序一般都有两个或者更多的窗体。有时在程序设计中,数据不仅要在同一个窗体中传递,还要在窗体间传递,尤其是用子窗体如何改变父窗体。这个问题已经不少人问过,在群里也为了那种方式好而争论过,昨天雨声.net问窗体间互操作的问题,让我萌生就这个问题写下这篇文章,希望对刚刚接触C#的朋友有所帮助,有疏漏之处,也希望朋友们指正,欢迎讨论。

窗体间传递数据,无论是父窗体操作子窗体,还是子窗体操作符窗体,无外乎以下几种方式:

  1. 公共静态变量;
  2. 使用共有属性;
  3. 使用委托与事件;
  4. 通过构造函数把主窗体传递到从窗体中;
  5. 使用中间类。


前4种方法适用的人比较多,大家也比较熟悉,我这里就不多说了,主要想详细介绍一下第五种,使用中间类的方法。比如从frm1打开frm2,在frm2中把frm1的text值改变为用户输入的字符串,并且关闭frm2。

首先先定义一个中间对象Observe
using System;

namespace demo
{
/// <summary>
/// Observe 的摘要说明。
/// </summary>
public class Observe
{
     private string strText;
     public event EventHandler TextChange;
     public string StrText
     {
      get{return strText;}
      set
      {
       strText = value;
       if(TextChange != null)
        TextChange(this,EventArgs.Empty);
      }
     }
     public Observe()
     {
      //
      // TODO: 在此处添加构造函数逻辑
      //
     }
}
}

在Form2中定义一个Observe成员
     private Observe o_Observer;
     public Observe observe
     {
      set
      {
       this.o_Observer = value;
      }
     }
在Form2的事件处理中改变o_Observe的StrText
     private void button1_Click(object sender, System.EventArgs e)
     {
      o_Observer.StrText = this.textBox1.Text;
      this.Close();
     }

在Form1中实例化一个Observer成员
private Observe o_Observe = new Observe();
在Form1的事件处理函数中创建Form2的实例,令Form2的observe属性等于Form1的o_Observe并且订阅Observe的事件
     private void button1_Click(object sender, System.EventArgs e)
     {
      Form2 frm = new Form2();
      frm.observe = o_Observe;
      this.o_Observe.TextChange += new EventHandler(o_Observe_TextChange);
      frm.Show();
     }

这样,Form1知道Form2,Form2不知道Form1

该技术文章为转载http://lx0319.spaces.live.com/blog/cns!4a2ed078c1f310e8!116.entry

目录
相关文章
|
运维 算法
分布式选举算法-霸道算法/欺负算法(bully algorithm)
分布式 选举 算法 霸道算法 欺负算法bully algorithm
558 0
分布式选举算法-霸道算法/欺负算法(bully algorithm)
|
Linux 网络安全
应用 openssl 工具进行 SSL 故障分析
http://www.ibm.com/developerworks/cn/linux/l-cn-sclient/index.
942 0
find: missing argument to `-exec&#39;
今天使用find命令查找删除文件时,遇到下面错误,这个是因为在{}和\之间必须要有空格,否则会报上面的错。 以前都没有注意到这个细节,特此记录一下。   [root@DB-Server full]#  find  .
1464 0
|
NoSQL 数据库 索引
|
负载均衡 算法 Java
通过 Ribbon 查询 Nacos 服务实例(上)
Nacos  提供了开放 API 可通过 /nacos/v1/ns/instance/list 获取服务列表。如果我们采用 spring-cloud 方式去获取服务,最终会通过 Nacos Client + loadbalancer 的方式进行客户端负载均衡。
494 0
|
监控 Java 关系型数据库
PostgreSQL服务器管理:备份和恢复
由于包含着有价值的数据,PostgreSQL数据库应当被定期地备份。虽然过程相当简单,但清晰地理解其底层技术和假设是非常重要的。 有三种不同的基本方法来备份PostgreSQL数据: SQL转储, 文件系统级备份, 连续归档。
2717 0
|
数据可视化 前端开发 JavaScript
Springboot构建Echarts数据可视化
pring boot集成了tomcat等容器,效率更高,要实现数据的可视化,需要构建spring Boot框架架构web项目。同时使用注意的方式,就可以轻松建立前端访问路径与后端controller方法的映射关系,而不用像servlet一样维护繁琐的xml映射配置表。
731 0
Springboot构建Echarts数据可视化

热门文章

最新文章