窗体之间传递值的几种方法

场景如下:

我有一个mainFrm(父窗体), 一个subFrm(子窗体) 点击父窗体的按钮启动子窗体,点击子窗体的按钮可以给父窗体设置值。如下图

第一种方法:启动子窗体,将整个窗体(this)传递过去。(不建议使用)

步骤如下:

1.在主窗体写一个函数SetText函数(这个地方也就是嵌入代码,你需要改那个窗体的内容,就在那个窗体写一个修改的函数。

 public void SetText(string msg) //这个地方SetText是公有的{this.textBox1.Text = msg;}

2.在new 子窗体的时候加入参数this.

 private void button1_Click(object sender, EventArgs e){          subFrm frm = new subFrm(this); //这个方法的核心就是传递thisfrm.Show();}

3.给子窗体添加构造函数重载(子窗体持有一个mainFrm类的变量parentFrm)。

 public subFrm(mainFrm parentFrm):this(){this._parentFrm = parentFrm;}

4.在子窗体的button事件上添加如下代码:

 private void button1_Click(object sender, EventArgs e){string sendText = this.textBox1.Text;this._parentFrm.SetText(sendText);}

  

第二种:使用委托

步骤如下:

1.在主窗体写一个函数SetText函数(这个地方也就是嵌入代码,你需要改那个窗体的内容,就在那个窗体写一个修改的函数。

 private void SetText(string msg){this.textBox1.Text = msg;}

2.在子窗体里面定义一个委托(算是委托类吧), public delegate void SendMsgDelegate(string msg); 这个定义要和主函数的SetText方法一致(返回值是void,参数是string)

 并且在定义一个委托(算是委托变量吧) public SendMsgDelegate sendMsg;用委托定义一个委托变量,这个委托变量只能接受返回值是void,参数是string的函数)。是类型安全的。

3.在主窗体的按钮事件上new子窗体的时候加入如下代码

 private void button1_Click(object sender, EventArgs e){subFrm frm = new subFrm(); //new一个子窗体frm.sendMsg = new SendMsgDelegate(SetText); 给那个子窗体的委托变量(sendMsg)赋值(主窗体的函数SetText)frm.Show();}

4.在子窗体的按钮事件上加入如下代码

 private void button1_Click(object sender, EventArgs e){string sendText = this.textBox1.Text; //读取自己窗体(子窗体)的textBox1的输入值if (sendMsg != null)//判断方法是否为空{sendMsg(sendText);//调用方法}}

df

 

窗体之间传递值的几种方法相关推荐

  1. C#中不同窗口之间传递值的两种方法

    在.net中不同窗口之间传值有很多种不同的方法,这里给出两种比较常用的方法: 项目中有两个窗体,Form1和Form2,要实现的效果是点击Form1中的Button1按钮实现TextBox1和Text ...

  2. ASP.NET页面之间传递值的几种方式

    页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值.存储对象传值.ajax.类.model.表单等.但是一般来说,常用的较简单有QueryString,Session,Cookie ...

  3. C#中窗体间传递数据的几种方法

    C#中窗体间传递数据的几种方法 在编写C#windows应用程序的时候我们经常会遇到这种问题,怎么样在两个窗体间传递数据呢?以下是我整理的网上的各种方法,在遇到一个实际问题:在form1中打开一个fo ...

  4. 经典面试题(三):ASP.NET部分----ASP.NET 页面之间传递值的几种方式

    ASP.NET 页面之间传递值的几种方式 1.使用QueryString,  如....?id=1; response. Redirect().... 2.使用Session变量. 3.使用Serve ...

  5. Asp.net页面之间传递参数的几种方法

    Asp.net页面之间传递参数的几种方法 第一种方法: 通过URL链接地址传递Request.QueryString send.aspx:    protected void Button1_Clic ...

  6. Asp.net页面之间传递参数的几种方法荟萃

    第一种方法: 通过URL链接地址传递  send.aspx:   protected void Button1_Click(object sender,EventArgs e)     {       ...

  7. 总结C#中窗体间传递数据的几种方法

    在编写C#windows应用程序的时候我们经常会遇到这种问题,怎么样在两个窗体间传递数据呢?以下是我整理的网上的各种方法,在遇到一个实际问题:在form1中打开一个form2窗口作为录入界面,将录入的 ...

  8. 页面之间传递参数得几种方法

    1.hidden变量 <form id="Form1" method="post" runat="server">     &l ...

  9. ASP.NET 页面之间传递值的几种方式

    1.使用QueryString, 如....?id=1; response. Redirect().... 2.使用Session变量 3.使用Server.Transfer 4.Cookie传值 5 ...

最新文章

  1. R语言KMeans聚类模型示例
  2. 深度优先搜索(dfs),城堡问题
  3. PHP如何调取vlc播放rtsp,H5+VLC播放RTSP视频流
  4. javaweb学习总结(三十一)——国际化(i18n)
  5. 使用SQL存储过程有什么好处 用视图有什么好处
  6. EJB3.0学习笔记---MDB--第一个MDBBean程序:
  7. axios取消接口请求
  8. 堆栈平衡(子程序调用)
  9. java httpclient 关闭_httpclient 4种关闭连接
  10. aliddns ipv6_利用阿里云ddns动态解析ipv6地址
  11. 南挚seo:参加白杨seo师徒群培训后两个月感悟总结!
  12. eleme接口测试01(C#)
  13. 原装世嘉土星SS手柄(Sega Saturn)改USB接口,实现低延时USB格斗手柄
  14. 智能搬运机器人系列之使用旭日X3派实现机器人防脱轨功能
  15. go语言 json -转载
  16. android仿空间短视频播放
  17. java applet 一个简单的例子(applet+html)
  18. 北京联通dns服务器位置,ipv6北京联通dns服务器地址
  19. andrAndroid 权限
  20. 职业自我认知的测试软件,职业规划 自我认知与职业测试 讲稿

热门文章

  1. 特斯拉自动驾驶要命?大白天忽然开启”自杀模式“
  2. 《浪潮之巅》吴军:特斯拉自动驾驶堪比中甲水平,全球5G看好华为
  3. 这是AI?这是爱?这是能全方位监控学生的“智能校服”
  4. ICLR 2019提交截止,近1600篇论文已全部上线
  5. 福特在迈阿密开始探索自动驾驶商业模式:先送比萨试试
  6. 无人驾驶是好,但晕车咋办?
  7. 怎么在线直接将多张CAD图纸转换成高质量黑白PNG格式?
  8. python接口自动化21-下载excel文件(Content-Type:octets/stream)
  9. phalcon:model 事件与事件管理器
  10. SCOM 2012知识分享-15:监视管理组运行状况