日期:2014-05-16  浏览次数:20841 次

c# 两个窗体间传值
窗体 form1中 new 了两个子窗体, form2  form3

然后form2.showDialog(); ( from2中有 labe1,labe2 )

然后在from2中点按钮,form3.showDialog();

怎么实现点form3中的按钮, 然后labe1.text = 1, 再点一下, labe2.text=2

也就是怎么把form3中的值传到form2中去


注意: form3 中变化了的内容要保存着,例如将form3中的 textbox1.text 改为 "abc",下次 form.showdialog时需要还存在,不是new一个新的出来
谢谢
------解决方案--------------------
定义一个静态全局变量,form3中内容变化时,将值赋给该静态变量,这个静态变量在所有窗体中均可访问

或者在 from3中定义一个属性,内容变化时,修改此属性的值,既然是从form2中new出的窗体,from2自然可以访问到from3的该属性值
------解决方案--------------------
这个看不是很明白建议贴图出来
如果单纯的窗体传值可以定义static变量
------解决方案--------------------
利用  委托  可以进行窗体之间传值
------解决方案--------------------
纯粹是窗体间传值,可以在一个窗体中定义static的变量,或者定一个静态类,各个窗口类可以共享数据了
------解决方案--------------------
http://bbs.csdn.net/topics/360140208

保存数据可以借助一个静态变量。如果你需要下次运行程序还在,可以保存在注册表或者配置文件中。
------解决方案--------------------
这是窗体传值的几种方法 供你参考

1.通过构造函数
特点:传值是单向的(不可以互相传值),实现简单
实现代码如下:
在窗体Form2中
int value1;
string value2;
public Form2 ( int value1 , string value2 )
{
InitializeComponent ( );
this.value1 = value1;
this.value2 = value2;
}
在窗体Form1中这样调用
new Form2 ( 111 , "222" ).Show ( ); //这样就把111,"222",这2个值传送给了Form2
2.通过静态变量
特点:传值是双向的,实现简单
实现代码如下:
在一个app类中定义一个静态成员value
public class app
{
public static string value;
}
在窗体Form1中这样调用
app.value = "f2"; //给静态成员赋值
new Form2 ( ).Show ( ); //显示Form2
在窗体Form2中
this.Text = app.value; //取回app.value的值
app.value = "Form2"; //给app.value赋值,以便其他窗体调用
3.通过窗体的公有属性值
特点:实现简单
实现代码如下:
在窗体Form2中定义一个公有属性Form2Value,获取和设置textBox1的文本值
public string Form2Value
{
get
{
return this.textBox1.Text;
}
set
{
this.textBox1.Text = value;
}
}
在窗体Form1中这样调用
Form2 f2 = new Form2 ( );
f2.Form2Value = "Ok"; //给Form2的textBox1赋值Ok
f2.ShowDialog ( );
4.通过窗体的公有属性值和Owner属性
特点:实现简单,灵活
实现代码如下:
在窗体Form1中
public int Form1Value = 1;
Form2 f2 = new Form2 ( );
f2.ShowDialog ( this ); //把Form1作为Form2的所有者传递给Form2
在窗体Form2中
//Form2的所有者是Form1
Form1 f1 = ( Form1 ) this.Owner;
//取到Form1的值是1
MessageBox.Show ( f1.Form1Value .ToString ( ) );
//给Form1的Form1Value赋值222
f1.Form1Value = 222;
5.通过窗体的公有属性值和Application.OpenForms属性
说明:Application.OpenForms属性:获取属于应用程序的打开窗体的集合。(此属性在 .NET Framework2.0版中)
实现代码如下:
在窗体Form1中
public int Form1Value = 1;
Form2 f2 = new Form2 ( );
f2.Show ( );
在窗体Form2中
string formName = "Form1";
Form fr = Application.OpenForms [ formName ];
if ( fr != null )
{
Form1 f1 = ( Form1 ) fr;
//取到Form1的值是1
MessageBox.Show ( f1.Form1Value.ToString ( ) );
//给Form1的Form1Value赋值2