TearSnow Fan


[C#] 在两个Form窗体间传值的简单方法

首先约定两个窗体,父窗体为FormP,子窗体为FormS。

一、父窗体传值给子窗体

首先需要在子窗体中定义存放该值的字段,这里以String类型的_strValue为例。为了能够在父窗体中对该字段的值进行设置,可将其声明为公共属性,或者在构造函数中初始化。

子窗体FormS中的代码:

public partial class FormS : Form
{
    public FormS()
    {
        InitializeComponent();
    }

    public FormS(string strValue):this()
    {
        _strValue = strValue;
    }

    private string _strValue;

    public string StrValue
    {
        set
        {
            _strValue = value;
        }
    }
}

在父窗体中只需要声明并初始化该子窗体,同时传值即可,将代码放在buttonShowFrmS的Click事件中,代码如下:

父窗体FormP中的代码:

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();
    }
}

二、子窗体返回值给父窗体

首先,子窗体需要知道其父窗体是谁,才能够对其传值,这就是窗体的Form.Owner属性。

因此,在父窗体中实例化一个子窗体后,要设置其Owner属性,将其设置为父窗体本身。同时需要定义接受该传值的字段,这里也用String类型的_strValue。

父窗体的代码如下:

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); //显示返回的值
}
}

子窗体代码如下,我们暂且将传值的过程写在子窗体的关闭按钮单击事件中:

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();
}
}

当然,也可以利用该属性,使子窗体主动从父窗体中获取值,从而实现前面所讨论的“一、父窗体传值给子窗体”的功能。

三、其他方法

当然,在多个窗体中传递值的方法还有很多,例如:

  • 将窗体的控件设为公共
  • Cookie,把值存到cookie中,可以在任一窗口取出来用,并进行修改
  • 资源,或文本输出,就是将数据存到固定文件中,和cookie类似
  • 配置文件,和使用资源类似,但有个特性就是可以用这个进行控件与数据绑定
  • 使用数据库等

本文固定链接: http://blog.xieyc.com/passing-value-between-two-forms/ | 小谢的小站

该日志由 xieyc 于2013年07月26日发表在 编程 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: [C#] 在两个Form窗体间传值的简单方法 | 小谢的小站

目前共有 0 条留言 【 访客:0 条, 博主:0 条 】暂时没有评论, 还不快枪沙发

发表评论

:wink: :neutral: :mad: :twisted: :smile: :shock: :sad: :roll: :oops: :eek: :mrgreen: :lol: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

快捷键:Ctrl+Enter