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

我原来用的是将form1中的控件mm属性改为public,然后是forms=newform2();s.show(this);打开第二个界面在第二个界面中Form1sd=(... 我原来用的是将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中
展开
 我来答
smart_ljh
推荐于2017-09-24 · TA获得超过378个赞
知道小有建树答主
回答量:152
采纳率:0%
帮助的人:167万
展开全部
给人写一个两个窗体之间值的传递的方法,不管对于子窗体还是父窗体都可用.具体代码如下:
(以下用窗体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 = "将我传过去!";

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

呵呵,记得选我为满意答案哦!先谢谢了!
rui_xing_
推荐于2017-09-01 · 知道合伙人教育行家
rui_xing_
知道合伙人教育行家
采纳数:6306 获赞数:51261
在读博士研究生

向TA提问 私信TA
展开全部
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 = "将我传过去!";
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qiu297007
2008-11-18
知道答主
回答量:10
采纳率:0%
帮助的人:0
展开全部
你在父窗体中实例化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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c53a071
2008-11-15 · TA获得超过697个赞
知道小有建树答主
回答量:2622
采纳率:0%
帮助的人:937万
展开全部
这里有两个方法可以解决你窗口传值

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

private int userId;

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

二、把控件改成public
Form1.Designer.cs
private System.Windows.Forms.TextBox textBox1;
把这里的private改成public
你就可以直接在其他窗口使用了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
宣义坊的大蚂蚁
2008-11-19 · TA获得超过2830个赞
知道大有可为答主
回答量:1617
采纳率:90%
帮助的人:882万
展开全部
如果是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();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式