C# 窗体间传值方法大汇总
发布时间:2021-05-20 14:35:12 所属栏目:大数据 来源: https://blog.csdn.net/kasama1
导读:C# 窗体间传值方法大汇总(转) ?@H_403_5@[问题点数:40分,结帖人happy09li] ? ? ?? ?? ? 不显示删除回复 ? ? ?? ?? ? 显示所有回复 ? ? ?? ?? ? 显示星级回复 ? ? ?? ?? ? 显示得分回复 ? ? ?? ?? ? 只显示楼主 ? ?? ?? ?? 收藏 关注 happy09li? 熙风 本版
C# 窗体间传值方法大汇总(转)?@H_403_5@[问题点数:40分,结帖人happy09li]
? ? ?? ?? ?
? ? ?? ?? ?
? ? ?? ?? ?
? ? ?? ?? ?
? ? ?? ?? ?
? ?? ?? ??
 收藏
|

关注
happy09li?

熙风
本版等级:

结帖率:99.25%

楼主
发表于: 2012-07-10 14:05:46
本帖最后由 zhaixiaohu 于 2012-07-13 09:57:59 编辑
第一种方法:
创建一个类,里面声明用于存储接收的字段。传的时候存储于字段中,要用的时候,直接类名.字段名?进行调用。(这种方法传递是双向的)
?
第二种方法:
1.在Form1里定义
public?string?Name?=?"*****"
?
2.?在Form2里创建Form1对象,
Form1?f?=?new?Form1();
?
然后就可以通过f.Name取值了
?
第三种方法:用构造函数
在窗体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??d
但是这样的传值是单向的
第四种方法:通过窗体的公有属性值(特点:实现简单)
举例“在窗体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?(?);?
?
第五种方法:通过窗体的公有属性值和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;?
?
第六种方法:通过窗体的公有属性值和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赋值222?
?????f1.Form1Value?=?222;?
}?
?
第七种方法:通过事件
在窗体Form2中定义公有属性Form2Value,获取和设置textBox1的文本值?
并且还定义一个accept事件
public?string?Form2Value?
{?
?????get?
?????{?
??????????return?this.textBox1.Text;?
?????}?
?????set?
????{?
?????????this.textBox1.Text?=?value;?
????}?
}?
public?event?EventHandler?accept;?
private?void?button1_Click?(?object?sender?,?EventArgs?e?)?
{?
?????if?(?accept?!=?null?)?
?????{?
??????????accept?(?this?,?EventArgs.Empty?);?//当窗体触发事件,传递自身引用?
?????}?
}?
在窗体Form1中
Form2?f2?=?new?Form2?(?);?
f2.accept?+=?new?EventHandler?(?f2_accept?);?
f2.Show?(?);?
void?f2_accept?(?object?sender?,?EventArgs?e?)
{?
?????//事件的接收者通过一个简单的类型转换得到Form2的引用?
?????Form2?f2?=?(Form2)?sender;?
?????//接收到Form2的textBox1.Text?
?????this.textBox1.Text?=?f2.Form2Value;?
}
(编辑:北几岛)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!