黑马程序员技术交流社区
标题:
WinForm如何传值到其他窗体?
[打印本页]
作者:
.net_交流
时间:
2014-7-30 21:25
标题:
WinForm如何传值到其他窗体?
本帖最后由 .net_交流 于 2014-7-31 22:22 编辑
写一个窗体,有一个按钮,点击打开另一个窗体,在另一个窗体中也有一个按钮点击来改变原来窗体的背景,要用到委托,不知道怎么写,怎么传值到其他窗体?
作者:
Kevion小远
时间:
2014-7-30 21:49
通过窗体的公有属性值
举个例子
在窗体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 ( );
作者:
倚楼听雨
时间:
2014-7-30 22:20
从Form1窗体单击打开Form2窗体,Form1窗体中控件的单击事件:
private void button1_Click(object sender, EventArgs e)
{
Form2 form = new Form2();
form.Show();
}
作者:
流失的温度0
时间:
2014-7-31 00:18
本帖最后由 流失的温度0 于 2014-8-1 14:22 编辑
不知道楼主发没发现窗体的扩展名也是.cs
所以窗体也是一个类,
所以楼主可以在目标窗体定义一个public类型的变量
然后在需要的时候给该变量赋值,
然后就可以在该窗体中使用了。
比如窗体1和窗体2
在窗体2的后台代码里定义public int a;
需要的时候写
Form2 fr=new Form2();
fr.a=10;
fr.show();
作者:
rende1991
时间:
2014-7-31 07:24
路过 学习
作者:
许庭洲
时间:
2014-7-31 08:33
本帖最后由 许庭洲 于 2014-8-1 05:57 编辑
1.公共静态变量:
Form1:
public static string Form1Value; // 注意,必须申明为static变量
private void button1_Click(object sender, EventArgs e)
{
Form1Value = "来自Form1";
new Form2().Show();
}
Form2:
private void Form_Load(object sender, EventArgs e)
{
MessageBox.Show(Form1.Form1Value);
}
2.使用共有属性:
在窗体
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 ( );
3.使用委托与事件:
在子窗体中设置一个委托类型的属性:
public Action<string> AfterChangeTextDel { get; set; }
在子窗体同步按钮中:
if (AfterChangeTextDel != null)
{
AfterChangeTextDel(this.textBox1.Text);//执行委托
}
在父窗体中添加方法:
public void AfterChildChange(string text)
{
txtName.Text = text;
}
在父窗体启动子窗体按钮:
ChildFrm frm =new ChildFrm();
frm.AfterChangeTextDel = new Action<string>(this.AfterChildChange);
frm.Show();
4.通过构造函数把主窗体传递到从窗体中:
在窗体Form2中
int value1;
string value2;
public Form2 ( int value1 , string value2 )
{
InitializeComponent ( );
this.value1 = value1;
this.value2 = value2;
}
在窗体Form1中这样调用
new Form2 ( 999 , "777" ).Show ( ); //这样就把999,"777",这2个值传送给了Form2
作者:
hujiapeng
时间:
2014-7-31 08:53
除了使用公共属性意外,还可以使用事件与委托那个方法传递http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html
作者:
马振伟
时间:
2014-7-31 09:55
窗体之间通信,可以把一些需要的东西设为public,比如窗体2的按钮点击,改变窗体1的某个按钮的背景颜色,这时候可以把窗体1的按钮的访问修饰符设为public的,但是这样给窗体2的权限就太大了,他不仅可以更改颜色,还可以更改其他很多的东西,处于安全,而且考虑到面向对象开放封闭的设计理念,这样就是不合理的
一般来说这种时候都是用事件,,首先要有一个参数为颜色的委托类型,然后在窗体2中声明一个对应参数的事件A.窗体1要写一个更改自己对应按钮颜色的方法,参数自然是颜色,然后把这个方法注册给窗体2的A事件,在窗体2点击事件绑定的方法内部,去调用这个事件A.就实现了需求
作者:
.net_交流
时间:
2014-7-31 22:28
许庭洲 发表于 2014-7-31 08:33
1.公共静态变量:
Form1:
public static string Form1Value; // 注意,必须申明为static变量
很全面 谢谢回答
作者:
倚楼听雨
时间:
2014-8-1 00:42
兄弟,顶起,共同努力共同进步
作者:
官方
时间:
2014-9-29 08:58
路过 学习~~~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2