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

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

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

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

相关文章

LeetCode 1566. 重复至少 K 次且长度为 M 的模式

文章目录1. 题目2. 解题1. 题目 给你一个正整数数组 arr&#xff0c;请你找出一个长度为 m 且在数组中至少重复 k 次的模式。 模式 是由一个或多个值组成的子数组&#xff08;连续的子序列&#xff09;&#xff0c;连续 重复多次但 不重叠 。 模式由其长度和重复次数定义。 …

R语言的安装与配置

一、什么是 R 语言 R 编程语言被广泛应用在统计科学和商业领域。 在各种编程语言排名中 R 语言的排名都很靠前。 它是一款集成了数据操作、统计&#xff0c;以及可视化功能的优秀开源软件。免费&#xff0c;开源是 R 重要的特点。 二、什么是 RStudio RStudio 是用亍 R 编程的…

R语言第一讲

一、R语言入门推荐 推荐四本材料书&#xff1a;R CookBook &#xff1a;hhtp&#xff1a;//www.cookbook-r.com/R in Action http://www.amazon.com/R-Action-Robert-Kabaccoff/dp/1935182390Ggplot2:Elegant Graphics for Data Analysis(User R):hhtp://www.amazon.com/ggplo…

LeetCode 1567. 乘积为正数的最长子数组长度

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums &#xff0c;请你求出乘积为正数的最长子数组的长度。 一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组。 请你返回乘积为正数的最长子数组长度。 示例 1&#xff1a; 输入&#xff1a;nums [1,-2,-…

LeetCode 1568. 使陆地分离的最少天数(DFS)

文章目录1. 题目2. 解题1. 题目 给你一个由若干 0 和 1 组成的二维网格 grid &#xff0c;其中 0 表示水&#xff0c;而 1 表示陆地。 岛屿由水平方向或竖直方向上相邻的 1 &#xff08;陆地&#xff09;连接形成。 如果 恰好只有一座岛屿 &#xff0c;则认为陆地是 连通的 &…

LeetCode 1569. 将子数组重新排序得到同一个二叉查找树的方案数(DP)

文章目录1. 题目2. 解题1. 题目 给你一个数组 nums 表示 1 到 n 的一个排列。 我们按照元素在 nums 中的顺序依次插入一个初始为空的二叉查找树&#xff08;BST&#xff09;。 请你统计将 nums 重新排序后&#xff0c;统计满足如下条件的方案数&#xff1a;重排后得到的二叉查…

ADS1.2开发环境创建与简要介绍

ADS1.2下建立工程 1.运行ADS1.2集成开发环境&#xff08;CodeWarrior for ARM Developer Suite&#xff09;&#xff0c;点击File|New,在New对话框中&#xff0c;选择Project栏&#xff0c;其中共有7项&#xff0c;ARM Executable Image是ARM的通用模板。选中它即可生成ARM的执…

阿里云 超级码力在线编程大赛初赛 第2场 题目1. 三角魔法

文章目录1. 题目2. 解题1. 题目 题目来源&#xff1a;https://tianchi.aliyun.com/oj/15165469968503404/76745683722506851 2. 解题 采用直线的一般式进行判定 首先要能组成三角形然后是我的位置和第3点在另外两点形成的直线同侧 class Solution { public:/*** param tria…

阿里云 超级码力在线编程大赛初赛 第2场 题目3. 五字回文

文章目录1. 题目2. 解题1. 题目 来源&#xff1a;https://tianchi.aliyun.com/oj/15165469968503404/76745683722506852 2. 解题 注意 a,b,c互不相同 class Solution { public:/*** param s: The given string* return: return the number of Five-character palindrome*/in…

python中解决死锁的方法

1.添加超时时间&#xff1a; fromthreading import Thread, Lock importtime mutex1 Lock() # 创建一个互斥锁 mutex2 Lock() # 创建一个互斥锁 def fun1(): while True: mutex1.acquire() print("线程1 锁住了mutex1") time.sleep(0.1) result mutex2.acquire(…

阿里云 超级码力在线编程大赛初赛 第2场 题目4. 小栖的金字塔(超级卡特兰数+除法求模/乘法逆元)

文章目录1. 题目2. 解题1. 题目 来源&#xff1a;https://tianchi.aliyun.com/oj/15165469968503404/76745683739284070 2. 解题 按道理可以DP暴力求解&#xff0c;但是数据规模太大&#xff0c;会超时的 手算前几项&#xff0c;然后去 oesi 网站查询数列&#xff0c;找到 大…

统计学习之箱线图

箱线图&#xff1a; 箱形图&#xff08;Box-plot&#xff09;又称为盒须图、盒式图或箱线图&#xff0c;是一种用作显示一组数据分散情况资料的统计图。因形状如箱子而得名。在各种领域也经常被使用&#xff0c;常见于品质管理。它主要用于反映原始数据分布的特征&#xff0c;还…

SQL SERVER 中 实现主表1行记录,子表多行记录 整合成一条虚拟列

表中有这样的记录&#xff0c;简单的主子表&#xff0c;现要想通过left join 语句把两表关联起来 select * from tbl_diary_reback a left join tbl_diary_reback_files s on a.id s.diaryrebackid where diaryid -7e0f6876:1400eb06d1f:-7fed and diaryrebackid 1a75114…

01.神经网络和深度学习 W4.深层神经网络

文章目录1. 深层神经网络2. 前向传播和反向传播3. 核对矩阵维数4. 参数、超参数参考&#xff1a; 吴恩达视频课 深度学习笔记 1. 深层神经网络 有的时候只有非常深的神经网络才能发挥作用。 但是无法提前预知多少层的神经网络合适&#xff0c;可以先尝试逻辑回归&#xff0c;…

R语言第六讲 数据的统计分析

基本命令练习 下面的代码涵盖了一些分析数据常用的一些R语言的命令&#xff1a; #基本向量、矩阵的一般操作 x <- c(1,3,2,5) x x c(1,6,2) x y c(1,4,3) length(x) length(y) xy ls() rm(x,y) ls() rm(listls()) ?matrix xmatrix(datac(1,2,3,4), nrow2, ncol2) x xmat…

struts2异常处理

java1234官网 在sstruts2里面配置自己的异常处理 1 <exception-mapping result"error" exception"java.sql.SQLException"/> 2 <result name"error">/error.jsp</result> 在service里面捕捉到异常后往外抛&#x…

LeetCode 486. 预测赢家(博弈DP)

文章目录1. 题目2. 解题1. 题目 给定一个表示分数的非负整数数组。 玩家 1 从数组任意一端拿取一个分数&#xff0c;随后玩家 2 继续从剩余数组任意一端拿取分数&#xff0c;然后玩家 1 拿&#xff0c;…… 。 每次一个玩家只能拿取一个分数&#xff0c;分数被拿取之后不再可取…

R语言第七讲 线性回归分析案例

题目 MASS 库中包含 Boston (波士顿房价)数据集&#xff0c;它记录了波士顿周围 506 个街区的 medv (房价中位数)。我们将设法用 13 个预测变量如 rm (每栋住宅的平均房间数)&#xff0c; age (平均房 龄)&#xff0c; lstat (社会经济地位低的家庭所占比例)等来预测 medv (房价…

01.神经网络和深度学习 W4.深层神经网络(作业:建立你的深度神经网络+图片猫预测)

文章目录作业1. 建立你的深度神经网络1. 导入包2. 算法主要流程3. 初始化3.1 两层神经网络3.2 多层神经网络4. 前向传播4.1 线性模块4.2 线性激活模块4.3 多层模型5. 损失函数6. 反向传播6.1 线性模块6.2 线性激活模块6.3 多层模型6.4 梯度下降、更新参数作业2. 深度神经网络应…

浅析调用android的content provider(一)

在Android下&#xff0c;查询联系人、通话记录等&#xff0c;需要用到content provider。但是&#xff0c;调用content provider时&#xff0c;Android框架内部是如何做的呢&#xff1f;这一系列文章就是解决这个问题的&#xff0c;所采用的开发环境及源码都是基于Android 1.6版…