[C#] 在两个Form窗体间传值的简单方法
首先约定两个窗体,父窗体为FormP,子窗体为FormS。
一、父窗体传值给子窗体
首先需要在子窗体中定义存放该值的字段,这里以String类型的_strValue为例。为了能够在父窗体中对该字段的值进行设置,可将其声明为公共属性,或者在构造函数中初始化。
子窗体FormS中的代码:
[code language="csharp"]
public partial class FormS : Form
{
public FormS()
{
InitializeComponent();
}
public FormS(string strValue):this()
{
_strValue = strValue;
}
private string _strValue;
public string StrValue
{
set
{
_strValue = value;
}
}
}
[/code]
在父窗体中只需要声明并初始化该子窗体,同时传值即可,将代码放在buttonShowFrmS的Click事件中,代码如下:
父窗体FormP中的代码:
[code language="csharp"]
public partial class FormP : Form
{
public FormP()
{
InitializeComponent();
}
private void buttonShowFrmS_Click(object sender, EventArgs e)
{
FormS FrmS = new FormS();//实例化一个FormS窗口
FrmS.StrValue = "传值给子窗口FormS的值";//设置FormS中string1的值
FrmS.ShowDialog();
}
}
[/code]
二、子窗体返回值给父窗体
首先,子窗体需要知道其父窗体是谁,才能够对其传值,这就是窗体的Form.Owner属性。
因此,在父窗体中实例化一个子窗体后,要设置其Owner属性,将其设置为父窗体本身。同时需要定义接受该传值的字段,这里也用String类型的_strValue。
父窗体的代码如下:
[code language="csharp"]
public partial class FormP : Form
{
public FormP()
{
InitializeComponent();
}
private String _strValue;
public String StrValue
{
set
{
_strValue = value;
}
}
private void buttonShowFrmS_Click(object sender, EventArgs e)
{
FormS FrmS = new FormS(); //实例化一个FormS窗口
FrmS.Owner = this; //重要的一步,主要是使FrmS的Owner指针指向父窗体
FrmS.ShowDialog();
MessageBox.Show(_strValue); //显示返回的值
}
}
[/code]
子窗体代码如下,我们暂且将传值的过程写在子窗体的关闭按钮单击事件中:
[code language="csharp"]
public partial class FormS : Form
{
public FormS()
{
InitializeComponent();
}
private void buttonClose_Click(object sender, EventArgs e)
{
FormP ownerFrm = (FormP)this.Owner;
ownerFrm.StrValue = "需要传给父窗体的值";
this.Close();
}
}
[/code]
当然,也可以利用该属性,使子窗体主动从父窗体中获取值,从而实现前面所讨论的“一、父窗体传值给子窗体”的功能。
三、其他方法
当然,在多个窗体中传递值的方法还有很多,例如:
- 将窗体的控件设为公共
- Cookie,把值存到cookie中,可以在任一窗口取出来用,并进行修改
- 资源,或文本输出,就是将数据存到固定文件中,和cookie类似
- 配置文件,和使用资源类似,但有个特性就是可以用这个进行控件与数据绑定
- 使用数据库等
本文固定链接: https://blog.xieyc.com/passing-value-between-two-forms/ | 小谢的小站