C#中如何在两个子窗体间传递参数

我原来用的是将form1中的控件mm属性改为public,然后是
form s=new form2();
s.show(this);打开第二个界面
在第二个界面中
Form1 sd = (Form1)this.Owner;
sd.mm=.....
就可以了,现在改成了多窗口模式了,如题?
例如form1是主窗口,其他的在他中打开,那么form3如何引用form2中的数据哪?
谢谢!
可能是我没说明白,二楼的是实现多窗口功能的吧?我这个已经实现了,现在是两个子窗口间的参数传递。如果可能希望高手给出代码
在主窗口1中打开子窗口2
Form sw = new Form2();
sw.MdiParent=this;
sw.Show();
然后再2中打开3
Form sw = new Form3();
sw.Show();
以上的怎么改一下可以把2中的数据传递到3中

给人写一个两个窗体之间值的传递的方法,不管对于子窗体还是父窗体都可用.具体代码如下:
(以下用窗体Form2和窗体Form3为例)
1、先在Form2中定义一个成员变量和一个属性如下:
private string form2zhi = null;
public string Form2ChuanZhi
{
get
{
return form2zhi;
}
}
2、再在Form3中定义一个成员变量和一个属性如下:
private string form3zhi = null;
public string Form3ChuanZhi
{
set
{
form3zhi = value;
}
get
{
return form3zhi;
}
}
3、以上基本已经搞定了,为了能够实现这个传值看的清楚一点,我在Form2加了一个bunton命名为btn_ChuanZhi
4、双击btn_ChuanZhi在这个事件中写入以下代码(主要是显示Form3窗体和将Form2中的值传过去):
Form3 form3 = new Form3();
form3.Form3ChuanZhi = form2zhi;//将值传过去
form3.Show();
5、在Form3中托一个Label控件,并双击Form3窗体Form3_Load事件中写入以下代码:
label1.Text = form3zhi;//为了显示值已经传过来了
6、这个运行是没错误了,但在Form3还不能看到传过来的值。下面来给Form2中的form2zhi赋值就可以了。
双击Form2窗体在Form2_Load中写入以下代码即可实现:
form2zhi = "将我传过去!";

好了到目前为止不同窗体间的传值已经实现了。以上方法对所有窗体都可用,不管是子窗体与主窗体之间还是子窗体与子窗体之间都可以。

呵呵,记得选我为满意答案哦!先谢谢了!
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-01
1、先在Form2中定义一个成员变量和一个属性如下:
private string form2zhi = null;
public string Form2ChuanZhi
{
get
{
return form2zhi;
}
}
2、再在Form3中定义一个成员变量和一个属性如下:
private string form3zhi = null;
public string Form3ChuanZhi
{
set
{
form3zhi = value;
}
get
{
return form3zhi;
}
}
3、在Form2加了一个bunton命名为btn_ChuanZhi
4、双击btn_ChuanZhi在这个事件中写入以下代码(
Form3 form3 = new Form3();
form3.Form3ChuanZhi = form2zhi;//将值传过去
form3.Show();
5、在Form3中托一个Label控件,并双击Form3窗体Form3_Load事件中写入以下代码:
label1.Text = form3zhi;//为了显示值已经传过来了
6、给Form2中的form2zhi赋值,双击Form2窗体在Form2_Load中写入以下代码即可实现:
form2zhi = "将我传过去!";
第2个回答  2008-11-18
你在父窗体中实例化Form2
Form2 f2= new Form2();
f2.MdiParent=this;
f2.Show();
这样是打开在父窗体中打开Form2
你可以把Form2作为参数传递到Form3
如下在父窗体中打开Form3
Form3 f3= new Form3(f2);
f3.MdiParent=this;
f3.Show();
你可以在窗体3中构造方法中接受f2
Form2 f2= null;
public Form3(Form2 form)
{
f2 = form;
}
现在你就可以在窗体3利用f2窗体对象索取f2窗体中的属性或方法了,但是f2窗体的属性和方法必须为public
第3个回答  2008-11-15
这里有两个方法可以解决你窗口传值

一、实体类
封装实体来传值

private int userId;

public int UserId
{
get { return userId; }
set { userId = value; }
}

二、把控件改成public
Form1.Designer.cs
private System.Windows.Forms.TextBox textBox1;
把这里的private改成public
你就可以直接在其他窗口使用了。
第4个回答  2008-11-19
如果是MDI的话,建议使用一个静态的Context来实现传值,如果使用将一个Form的控件设置为public会造成很大程度的混乱,在你维护的时候就知道了。

在工程中定义一个类如下(为了提高性能使用哈希表):

public class Context
{
public static HashTable ContextData = new HashTable();
}

在任何一个Form上都可以通过以下的代码访问:
// 将Form1数据 this.txtSampleKey1.Text存入上下文供其他窗体使用。
if( !Context.ContextData.ContainKey("Key1"))
{
Context.ContextData.Add("Key1",this.txtSampleKey1.Text);
}
else
{
Context.ContextData.ContainKey["Key1"] = this.txtSampleKey1.Text;
}

//在Form2中使用Form1的this.txtSampleKey1.Text
this.txtTarget.Text = Context.ContextData.ContainKey["Key1"].ToString();