C#窗体传值实例汇总
本文实例汇总了C#窗体传值的方法。分享给大家供大家参考。具体方法如下:
1.静态变量传值,非常简单适合简单的非实例的
publiccalssform1:Form{
publicstaticintA;
}
publicclassform2:Form{
form1.A=1;
}2.委托传值
publicclassform1:Form{
publicintA{get;set;}
publicstaticAction<int>setIntADelForClass;//类的委托
publicAction<int>setIntADel //实例的委托
publicvoidsetintA(inta){
A=a;
}
publicvoidform_load(objectsender,EventArgse){
setIntADelForClass=setIntA;
setIntADel =setIntA;
}
}
publicclassform2:Form{
publicvoidsetFom1IntA{
form1.setIntADelForClass(10);//通过类的委托将form1的A变量设置为10
form1fm1=newform1();
fm1.setIntADel(12);//通过实例的委托将新实例fm1的A变量设置为12
}
}3.使用onwer属性,适合对话框之间的传值
publicclassForm1:Form{
publicintA{get;set;}
privatevoidbutton1_click(objectsender,EventArgse){
A=10;
Form2fm2=newForm2();
fm2.ShowDialog(this);
}
}
publicclassForm2:Form{
privatevoidbutton1_Click(objectsender,EventArgse)
{
Form1fm=(Form1)this.Owner;
MessageBox.Show(fm.A);//读Form1的A
fm.A=11;//写Form1的A
}
}
当然也可以使用委托继续传值
4.重构窗体构造函数,初始化的时候传值,只适合初始化的适合,不够方便
5.委托+事件的方法
下面代码是一个点击Form1button使Form2的button显示Form1.textbox内容
可以一次性传很多值,步骤是在窗体A中声明一个事件,B窗体中实现相同方法签名的方法为事件赋值,B中回调该方法
Form1的代码:
//--------------------------------------->>--------------------Form1---------------
publicpartialclassForm1:Form{
publicstringB//获取textbox1的text
{
get{returntextBox1.Text;}
set
{
textBox1.Text=value;
}
}
publicdelegatevoidEventArgsaccept(objectsender,acceptEventArgse);//声明一个事件签名的委托
publicstaticeventEventArgsacceptaccept;//相当于实例化一个事件
privatevoidbutton1_Click(objectsender,EventArgse)
{
acceptEventArgsae=newacceptEventArgs();
ae.b=B;
if(accept!=null){
accept(this,ae);
}
}
}
}
publicclassacceptEventArgs:EventArgs{//封装EventArgs类,添加可传递的属性
public stringb{get;set;}
}
//------------------->>----------------------------------endcodeofform1-----------form2的代码,实现一个相同签名的方法,如我们的accept的签名是方法名(objecta,acceptEventArgsb);
//-------------------------------------->>---------------------------------------codeofform2---
publicpartialclassForm2:Form{
privatevoidForm2_Load(objectsender,EventArgse)
{
Form1.accept+=Form1_accept;//为form1的事件赋值,当form1执行该事件的时候会执行该方法
}
voidForm1_accept(objectsender,acceptEventArgse){//实现一个相同方法签名的方法
this.button1.Text=e.b;
}
}
//------------------------>>---------------
具体的原理,我想因为委托是函数指针所以可以通过传值能保存函数指针的位置?所以可以标记相应的实例的,执行其他实例的方法?
还没看编译原理,发表一下自己看法,不要误导大众
6.通过全局数据读写,适合登陆验证
AppDomain.CurrentDomain.SetData("user","小明");
AppDomain.CurrentDomain.GetData("user");
希望本文所述对大家的C#程序设计有所帮助。