C#实现Winform窗口间数据交互的三种方法介绍

2010-03-15  来自:CNBLOG  字体大小:【大 中 小】
  • 摘要:本文分别介绍C#实现Winform窗口间数据交互的三种方法:修改子窗体的构造函数、给窗体添加属性或方法、通过委托的方法,并提供简单的示例代码供参考。
1、修改子窗体的构造函数:

  简单地说就是通过修改子窗体Form的构造函数,如下所示:

public Frm_Child(string Para1, ArrayList List1, TextBox textBox1, Form. Frm_Main)
  {
      InitializeComponent();
   }

上面的例子中,为子窗体Frm_Child添加了4个参数,分别是:字符串Para1,字符数组List1,文本控件textBox1和父窗体Frm_Main,下面简单区分一下它们各自的特点:

  <1> 字符串:单向的值传递,在子窗体中不能通过修改此参数的值来间接改变父窗体中的数据。

  <2> 字符数组:引用型传递,可以通过将父子窗体中不同的成员变量指向相同的数组,即可实现变更一方,同时更新对方的数据。

  <3> 控件:引用型传递,可以通过修改该控件的数据来直接达到控制父窗体中该控件数据的目的。

  <4> 窗体: 这个最直接,直接将父窗体传递到子窗体中,我们可以方便地在子窗体中修改父窗体中所有授权为public 的数据。

  2、给窗体添加属性或方法:

  获取或设置拥有此窗体的窗体。若要使某窗体归另一个窗体所有,请为其 Owner 属性分配一个对将成为所有者的 窗体的引用。当一个窗体归另一窗体所有时,它便随着所有者窗体最小化和关闭。例如,如果 Frm_Child 归窗体 Frm_Main所有,则关闭或最小化 Frm_Main 时,也会关闭或最小化 Frm_Child。并且附属窗体从不显示在其所有者窗体后面。可以将附属窗体用于查找和替换窗口之类的窗口,当选定所有者窗体时,这些窗口不应消失。若要确定某父窗体拥有的窗体,请使用OwnedForms属性。

  我们可以通过下面的方式来确定这种从属的窗体关系:

Frm_Child form. = new Frm_Child();
   form.Owner = this;
   form.ShowDialog();

  或者

   Frm_Child form. = new Frm_Child();
   form.ShowDialog(this);

  定了从属关系以后,我们就可以通过在Form的load事件中或者通过定义public的属性或者方法来彼此进行数据修改操作,简单操作如下:

Frm_Main pareForm. = (Frm_Main)this.Owner;  
   this.listData1 = pareForm.ListData2;

  3、通过委托的方法:

  相对以上两种方法来说,这种方法可能较复杂一些,但基本思路是一样的,需要修改的地方如下:

  <1> 在Frm_Child.cs中添加委托函数定义:public delegate void SendFun(string str);

  <2> 在Frm_Child.cs中添加委托示例:public event SendFun SendToParent;

  <3> 在Frm_Child.cs中添加一个按钮,并添加其事件如下:

private void button1_Click(object sender, EventArgs e)
     {
       if (Send != null)
      {
           Send(this.textBox1.Text);
       }
      }

  <4> 在Frm_Main.cs中添加方法RecvInfo()方法如下:

private void RecvInfo (string str)
    {
        textBox1.Text = str;
    }

  <5> 在Frm_Main.Designer.cs中的InitializeComponent()方法中添加委托实例定义:

this.myForm.Send += new Example3_Frm_Child. SendFun (RecvInfo);

  通过上面五步操作,即可达到Form间的通信的目的。

以上介绍的就是C#实现Winform窗口间数据交互的三种方法,希望对你了解C#实现Winform窗口间数据交互有所帮助。

转载于:https://www.cnblogs.com/bantongshui/p/3196422.html

转:c#委托事件实现窗体传值通信相关推荐

  1. 转:c#委托事件实现窗体传值

    效果图下如下:开始启动的是窗口1,打开窗口2后,在窗口1中textBox1开始输入,窗1中的内容同时显示在窗2 textBox1中. 要想在窗口2中显示窗1的信息,首先,要建立一个刷新窗2中textB ...

  2. C# 利用委托事件进行窗体间的传值

    引言: 窗体间传值是每个学习WinForm新手的常见问题,最初级的方法就是 在窗体中先获取到要接受值窗体.然后通过.得到某个空间或者属性,直接赋值,这个需要接收放的窗体属性或者空间必须是public ...

  3. C#中委托与事件的使用-以Winform中跨窗体传值为例

    场景 委托(Delegate) 委托是对存有某个方法的引用的一种引用类型变量. 委托特别用于实现事件和回调方法. 声明委托 public delegate int MyDelegate (string ...

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

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

  5. 委托事件实现更新窗体

    委托 和 事件在 .Net Framework中的应用非常广泛. 委托( Delegate ):是一种定义方法签名(只有方法的名字,没有方法体),可以与具有兼容的签名的任何方法关联.所谓兼容的方法,是 ...

  6. 使用委托(事件)或中介设计模式实现多个Windows窗体文本框的同步

    需求 主窗体的文本框内容发生改变的时候,多个子窗体的文本框也发生改变. 中介设计模式 实现 当主窗体的文本框内容发生改变的时候,通过接口向所有实现这个接口的窗体发送一条消息(执行接口中的方法),从而实 ...

  7. Observer设计模式中-委托事件-应用在消息在窗体上显示

    Observer设计模式:监视者模式.在类中的方法中处理的结果或者消息通过事件委托 的方式发送给主窗体. 因为在其它类中直接访问主窗体类,显示内容是不能直接调用控件赋值的,当然也有别的类似查阅控件名, ...

  8. C#跨窗体传值的几种方法分析第三版

    窗体传值是在学习窗体应用程序时碰到的一类比较常见的问题,现将窗体传值方法做了一点总结,方法如下: <1>声明全局变量传值: 在Form1中声明全局变量,如下所示: 1 public sta ...

  9. 老题新理解-在话winform之间的窗体传值

    也许当你看到标题的时候,你会想,这窗体间传值方法就这么多,无非就是那几种: 1.静态变量(这个最简单) 非时性的传递: 1.窗体的属性 2.构造函数 时时性的传递: 1.委托 2.静态变量(这个最简单 ...

最新文章

  1. LeetCode-笔记-525. 连续数组
  2. k8s中service类型
  3. java 对象创建过程_5种创建Java对象的方式
  4. suse linux下交叉编译,SUSE 10.1下交叉编译环境构建
  5. CSS中文档流之普通流,浮动及定位、浮动特性及清除浮动的方式、定位模式,子绝父相搭配定位方式、z-index层级
  6. Android系统---- 全面屏(18:9屏幕)适配指南
  7. c java string转int_jni java和C之间的值传递(int String int[])
  8. 地理空间数据云下载的dem数据打不开怎么办? 显示光盘映像已损坏
  9. Tesseract-OCR 字体库下载地址
  10. BP神经网络预测实例(matlab代码,神经网络工具箱)
  11. python反爬中url之aes加密_python反爬之前端加密技术
  12. 文本框内容改变的绑定事件
  13. python中print输出变量_python中如何使用print函数?
  14. python爬取微博设备显示怎么更改_Python定向爬虫模拟新浪微博登录
  15. EXCEL-VBA:EXCEL的各种文件名获取
  16. 地理地貌3D打印案例
  17. 4.2 char类型介绍
  18. 实现JS标签切换效果【CSS图片切换】
  19. 二十五条励志金句,让你迅速提升自己的价值!
  20. navicat premium连接数据库出现2059错误

热门文章

  1. 关于禁止svn客户端长驻内存的方法
  2. C++之STL理论基础
  3. 阿里云@广东:让我们一起上云!
  4. (翻译)31天Windows Phone学习-1-项目模板
  5. MyBatis collection的两种形式——MyBatis学习笔记之九
  6. linux输出文字的颜色特效
  7. Android数据的存储方式简介
  8. 在Exchange 2010中重建Exchange安全组
  9. java String类 常用函数
  10. 图像传感器之CMOS(2)