C#不同窗体之间传递参数
最近导师安排C#写桌面GIS开发。碰到诸多问题。无奈不是计算机出身的我早就把编程基础还给老师了。开发过程属于敲代码两分钟翻博客两小时的状态,这边将自己的问题及解决方案总结。希望有所帮助。
主要两个内容:①父窗口给子窗口传递参数,②子窗口给父窗口传递参数。
1.父窗口向子窗口传递参数
这个就比较简单了,级别高一点访问也轻松一点。具体的原理我就不讲了(感觉说不清楚OJ2…),总之使用类的私有变量然后父窗口赋值就可以了。
父窗口(mainForm)代码:
namespace demo_Params
{
public partial class mainForm : Form
{
public mainForm()
{
InitializeComponent();
}
//传递变量到子窗口
private void btn_Input_BtnClick(object sender, EventArgs e)
{
childForm childForm = new childForm();//childForm为新建窗口类
childForm.str = this.tb_MainFormIn.InputText ;//str为子类的公有变量
if (childForm.ShowDialog() == DialogResult.OK) return;
}
}
}
子窗口(childForm)代码:
namespace demo_Params
{
public partial class childForm : Form
{
public childForm()
{
InitializeComponent();
}
//私有变量和赋值,value值在父窗口传递
private string w_str;
public string str
{
set
{
w_str = value;
}
}
//显示父窗口的变量到文本框
private void btn_getPara_BtnClick(object sender, EventArgs e)
{
this.tb_childFormIn.Text = w_str;
}
}
}
2.子窗口向父窗口传递参数
这个就比较麻烦了,看了很多,自己用起来感觉不错的是通过委托事件和事件触发执行函数来解决参数的传递和接受。道理就不说了,直接COPY用起来。
父窗口(mainForm)代码:
namespace demo_Params
{
public partial class mainForm : Form
{
public mainForm()
{
InitializeComponent();
}
//接受参数初始化
string str = "";
//打开子窗口childForm
private void btn_openWin_BtnClick(object sender, EventArgs e)
{
childForm childForm = new childForm();
childForm.getParam += new backParam(fun_GetChildParam);//绑定事件
if (childForm.ShowDialog() == DialogResult.OK) return;
}
//委托事件执行方法
void fun_GetChildParam(string w_childpara)
{
str = w_childpara;
}
//显示参数到文本框,看看参数能不能调用
private void btn_Output_BtnClick(object sender, EventArgs e)
{
tb_MainFormOut.InputText = str;
}
}
}
子窗口(childForm)代码:
namespace demo_Params
{
public delegate void backParam(string str);//声明委托
public partial class childForm : Form
{
public childForm()
{
InitializeComponent();
}
public event backParam getParam;//委托事件,接受一个string变量
//传回变量 关闭窗口
private void btn_childFormBack_BtnClick(object sender, EventArgs e)
{
getParam(this.tb_childFormIn.Text);//将变量委托
this.DialogResult = DialogResult.OK;
}
}
}
3.代码说明
两种传递参数的情况,我写在了一个程序里面。整理时为了区分,有所删改。(子传父代码块内不含父传子内容)
直接复制代码至WPF项目中,应该不能运行。 使用了第三方控件,部分控件属性、事件命名不同。大家如要复现使用TextBox和Button即可。
欢迎大家反馈交流。
本文链接:https://blog.csdn.net/qq_38560619/article/details/107049844