博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
窗体之间传递值的几种方法
阅读量:7084 次
发布时间:2019-06-28

本文共 1816 字,大约阅读时间需要 6 分钟。

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

场景如下:

我有一个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); //这个方法的核心就是传递this            frm.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

 

 

转载于:https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_cs_0002.html

你可能感兴趣的文章
Python高级:细说Python浅拷贝和深拷贝
查看>>
小技巧:利用QUIC提升Chrome浏览器网页打开速度
查看>>
windows redis 集群搭建(一)
查看>>
Sql优化器究竟帮你做了哪些工作?
查看>>
CentOS 5.6下pptpd *** 服务器搭建
查看>>
Android 生成keystore的两种方式
查看>>
spring 的事务回滚 异常exception 和 编译期异常和运行期异常
查看>>
淘宝切换效果
查看>>
我的友情链接
查看>>
分享一篇防刷机知识的文章
查看>>
我的友情链接
查看>>
Javascript Prototype
查看>>
判断链表是否有环,并返回链表的第一个节点
查看>>
yii日志功能详解
查看>>
前端开发面试题【转】
查看>>
AndEngine引擎学习之环境配置以及示例修改
查看>>
2014阿里云AWDC参会总结
查看>>
Echarts饼形图(二)
查看>>
Winform Timer控件时间间隔
查看>>
Android研发中对String的思考
查看>>