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#程序设计有所帮助。