窗体之间传递值的几种方法
窗体之间传递值的几种方法
场景如下:
我有一个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
posted on 2016-01-12 11:44 LinuxPanda 阅读(1109) 评论(0) 编辑 收藏 举报