在一个项目中,很多时候都需要在窗体间进行数据传递和通信,最觉见的是父子窗体之间的数据传递,比如登录ID,各个窗体都需要知道。有很多文章都写了这方面的问题,提出很多优秀的方法,鄙人不才,搜了一些资料之后,准备献丑了。

1.       如果很多窗体都需要用到某一窗体的东西,比如登录窗体记录的ID,为了避免每个窗体都去查询数据库,可以把这些公共变量或信息写入配置文件,每个窗体去读配置文件即可。

2.       如果共享信息的窗体不多,则对于兄弟窗口,可以通过其共同的父窗体来传递数据,此时父窗体如果是容器,只需要在本窗口中定义一个指向父窗体的变量即可,当然不需要NEW的。

如:父窗体form1两个子窗体subform1 subform2,均在由父窗体通过NEW得到,且均定义为全局公共变量,即在所有成员函数外定义为public。我们希望把子窗体1即subform1中textbox的内容传递到子窗体2即subform2的textbox中,可以这样做:

  先设父窗体的属性mdicontainer=true。在subform2中:Form1 parentform=(Form1)this.mdiparent; 此时,在subform2中便可以通过:this.textbox.text=parentfrom.subform1.textbox.text ,将subform1 中textbox的值赋给了subform2的textbox。同理,也可以在subform2中直接修改subform1.textbox的值:parentfrom.subform1.textbox.text=”XXXX”。当然这样做的前提是这些控件如textbox都必须声明成public。

3.       父子窗体间传递数据。form1是父窗体,form2是子窗体,form2由form1直接NEW得到,两窗体中均含有public型的textbox1。父窗体向子窗体传递数据是相当容易的,只需把子窗体中的控件或变量声明为public,直接在窗体中修改即可。但子窗体向父窗体传递数据就没那么简单了。当然我们可以采用上述的第二种方法,不过此时父窗体是容器,如果里面还要放其它控件,必须用panel装起来。如果不想父窗体成为容器,可以通过把父窗体通过子窗体的构造函数传递给子窗体,子窗体中有一个变量指向窗体即可。子窗体构造函数:

  public Form1 frm1;public Form2(Form1 frm1){    InitializeComponent();this.frm1 = frm1;}

在父窗体中new子窗体:Form2frm2 = new Form2(this);之后就可以随便修改子窗体中声明为public的变量或控件了,如frm2.textBox1.Text=”good”;。通过子窗体的构造函数我们可以看到,子窗体有一个变量指向父窗体,相当于一个指针。这样在子窗体中可以直接访问父窗体: this.frm1.textBox1.Text ="good";我们返回去看发现父窗体的textbox1.text确实变成了good。如果在窗体中将frm2定义为public型,那么就可以循环访问了。如this.frm1.frm2.frm1.frm2.frm1.frm2….无穷下去。所以尽量避免将其定义为全局public型,同时不要写出上述循环访问的语句。显然,我们可以用这种方法代替第二种方法,即使父窗体不是容器,我们也照样可实现兄弟窗体间数据的传递,当然前提是窗体都处于打开状态。假设现在又有一个子窗体form3,此时,必须在父窗体中把两个子窗体都定义成public:Form2frm2 =new Form2(this)  ; Form3frm3 =newForm3(this)。如果Form2访问Form3,在Form2中,通过如下方式:string text=this.frm1.frm3.textbox1.text便取得了Form3中textbox1的text值。在Form2中修改Form3中textbox1的text值也同理可以做到。

C#不同窗体间通信,数据传递相关推荐

  1. C#中两个窗体间的数据传递

    winform 窗体编程 在两个窗体间传递数据可分为两种: 一:父窗体向子窗体传递. 二:子窗体向父窗体传递. 传递实现的机制: 分别在两个窗体中创建公有属性的设置字段,分别供两个窗口调用. 两种情况 ...

  2. Android之一窥究竟Activity间的数据传递以及Intent的用处

    1.Activity与Intent * 1.1何为Intent * 1.2Intent的用武之地 * 1.3Activity间的数据传递 转载请标明出处: http://blog.csdn.net/h ...

  3. 浅谈ASP中Web页面间的数据传递

    [简 介] 基于Web的动态网页设计必会涉及到页面间的数据传递,文章探讨了ASP设计中常用的Web页面间的数据传递方式,分析各种数据传递方式的使用方法.使用场合及优缺点,其都是设计阶段选择数据传递方式 ...

  4. C#窗体间的数据传值(转)

    关于C#窗体间的数据传值的方法好几种,在项目中都各有应用,虽然简单,这里记录下来,分享给大家! 一.使用带参数的构造函数 主窗体 private void button_Click(object se ...

  5. 实现程序间的数据传递

    在实际应用中,我们经常需要多个程序相互配合来完成某些特定功能.例如两个应用程序间的同步.互斥:应用程序在起第二份实例时的参数自动传递-.要实现这些功能,就必须能实现程序间的数据传递. 有些特殊的高级技 ...

  6. 利用委托 实现窗体间通信,非原创

    copy自:https://www.cnblogs.com/hugoNB/p/7130562.html,这个作者写的浅显易懂,就复制下来自己看 实现过程: 这里主要是用到委托实现,所以主要描述一下委托 ...

  7. 【转载】用Delphi实现程序间的数据传递

    在实际应用中,我们经常需要多个程序相互配合来完成某些特定功能.例如两个应用程序间的同步.互斥:应用程序在起第二份实例时的参数自动传递-.要实现这些功能,就必须能实现程序间的数据传递. 有些特殊的高级技 ...

  8. Android Activity/Fragment间的数据传递

    Activity间的数据传递 举例:MainActivity是已经打开的Activity,在这个界面打开第二个Activity,SecondActivtiy,如果是直接通过startActivity( ...

  9. C#利用委托实现窗体间的值传递

    C#利用委托实现窗体间的值传递 A.网上有很多方法,大家可搜一下,都可用. B.这里只是说明下是只利用委托,学习基本的委托运用. 方法如下: 1.C#建立一个默认工程,默认窗体Form1 2.加入一个 ...

最新文章

  1. 高房价可控制人口增长与人口素质?
  2. 居然出错.谁能帮我解决一下.
  3. 用c语言实现去bmp图片的背景,菲律宾博牛网-官方网站
  4. java序列化kr_序列化专用列表
  5. 查找一:C++静态查找
  6. 判断数据表是否存在,不存在则创建
  7. 《剑指offer》面试题30——最小的k 个数
  8. 结尾匹配_2.nginx的server_name匹配顺序
  9. 基于Python的简单数据挖掘
  10. 找Devcon.exe的同学看过来
  11. 剪切蒙版与抠图的结合
  12. java 算法,Java的十大算法你掌握好了吗?
  13. mysql分区语录_MYSQL分区管理
  14. 在 React 中使用 TypeScript、使用CRA创建TS项目、React 中的常用类型
  15. 双击打不开pycharm问题
  16. 计算机视觉 OpenCV【六:应用之颜色检测】
  17. opencv 求矩阵的逆
  18. Flutter地图系列(七)—— 高德地图记录运动轨迹
  19. 自动驾驶汽车:传感器融合与5G互联的益处
  20. int,long,long long类型的数值范围

热门文章

  1. Symbian S60 签名工具
  2. 在vue-cli项目下简单使用mockjs模拟数据
  3. App的selenium,Appium爬App!
  4. localStorage使用总结,页面跳转,保存值
  5. #10 Linux硬盘管理
  6. 2012年蓝桥杯【初赛试题】 转方阵
  7. WebSocket科普
  8. Kubernetes学习笔记之Calico CNI Plugin源码解析(二)
  9. 第三章-电商项目-优化评论分页查询
  10. 设计模式--单例模式--Java实现