您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > C#窗体间传值方法汇总
假设我们需要点击主窗体FMMain中的某一个按钮时打开子窗体FMChild并将某一个值传给子窗体FMChild,一般情况下,我们点击按钮显示子窗体FMChild的代码为:FMChildfmChild=newFMChild();fmChild.ShowDialog();fmChild.Dispose();如果我们需要将主窗体FMMain中的stringstrValueA的值传给FMChild,那么我们首先对strValueA进行如下处理:privatestringstrValueA;publicstringStrValueA{get{returnstrValueA;}set{strValueA=value;}}使其成为主窗体FMMain的一个属性,接着修改显示子窗体的代码为以下两种的其中一种。方法一:FMChildfmChild=newFMChild();fmChild.ShowDialog(this);fmChild.Dispose();方法二:FMChildfmChild=newFMChild();FMChild.Owner=this;fmChild.ShowDialog();fmChild.Dispose();然后在修改子窗体FMChild中申明一个主窗体FMMain对象,FMMainfmMain;在需要使用主窗体FMMain的stringstrValueA的地方加上如下代码:fmMain=(FMMain)this.Owner;这样,就可以获得主窗体FMMain中strValueA的值了。这时,如果你需要将子窗体FMChild中的stringstrValueB传给主窗体FMMain,同样处理stringstrValueB。privatestringstrValueB;publicstringStrValueB{get{returnstrValueB;}set{strValueB=value;}}那么你在关闭子窗体代码fmChild.Dispose();后,可以写一些代码来保存或者处理FMChild的strValueB,例如:stringstrTmp=fmChild.StrValueB;注意,在VisualC#智能设备PocketPC2003设备应用程序中显示子窗体FMChild只能使用:FMChildfmChild=newFMChild();FMChild.Owner=this;fmChild.ShowDialog();fmChild.Dispose();在VisualC#智能设备PocketPC2003的设备应用程序中ShowDialog()没有重载。C#窗体间传值的几种方法调用窗体(父):Form1,被调用窗体(子):Form2方法1:所有权法//Form1://需要有一个公共的刷新方法publicvoidRefresh_Method(){//...}//在调用Form2时,要把Form2的所有者设为Form1Form2f2=newForm2();f2.Owner=this;f2.ShowDialog();//Form2://在需要对其调用者(父)刷新时Form1f1;f1=(Form1)this.Owner;f1.Refresh_Method();方法2:自身传递法//Form1://需要有一个公共的刷新方法publicvoidRefresh_Method(){//...}Form2f2=newForm2();f2.ShowDialog(this);//Form2:privateForm1p_f1;publicForm2(Form1f1){InitializeComponent();p_f1=f1;}//刷新时p_f1.Refresh_Method();方法3:属性法//Form1://需要有一个公共的刷新方法publicvoidRefresh_Method(){//...}//调用时Form2f2=newForm2();f2.P_F1=this;f2.Show();//Form2:privateForm1p_f1;publicForm1P_F1{get{returnp_f1;}set{p_f1=value;}}//刷新时p_f1.Refresh_Method();方法4:委托法//声明一个委托publicdelegatevoidDisplayUpdate();//Form1://需要有一个公共的刷新方法publicvoidRefresh_Method(){//...}//调用时Form2f2=newForm2();f2.ShowUpdate+=newDisplayUpdate(Refresh_Method);f2.Show();//Form2://声明事件publiceventDisplayUpdateShowUpdate;//刷新时,放在需要执行刷新的事件里ShowUpdate();Form1中放一个Label1,一个Button1,Form1为主窗口,当点击Button1时,执行:Form2f2=newForm2();f2.ShowDialog(this);Form2中放一个TextBox1,一个Button1,当点击Button1时执行:Form1f1=(Form1)this.Owner;f1.Label1.Text=this.TextBox1.Text;注意:Form1中的label1要设为public用C#实现两个WinForm间的传值这个题目我曾经出给来公司面试的人,也曾经出给刚毕业的大学生,几乎是没有人会做啊。难道这个问题真的这么难么?现在我给出实现的主要源代码(开发平台为VC#2005)。实现的思路:从Form1传递到Form2:2个窗体即两个类,两个窗体间的数据传送,可以采用构造函数来实现。从Form2返回到Form1,并传递数据:实例化Form2后,打f2用ShowDialog()方法,然后等待f2关闭时再回传数据到Form1。实现步骤及代码:1:新建两个窗口:Form1,Form2;2:打开Form2,添加一个textBox:textBox1;添加一个Button:button1;然后添加一个构造函数://定义一个变量,用来传值。publicstringreturnValue;publicForm2(stringtxtValue){InitializeComponent();this.textBox1.Text=txtValue;}然后在button1的单击事件中添加如下代码:privatevoidbutton1_Click(objectsender,EventArgse){returnValue=this.textBox1.Text;this.Close();}3:Form1中添加一个textBox:textBox1;添加一个Button:button1;然后在button1的单击事件中添加如下代码:privatevoidbutton1_Click(objectsender,EventArgse){stringtxtValue=this.textBox1.Text;Form2f2=newForm2(txtValue);f2.ShowDialog();this.textBox1.Text=f2.returnValue;}Form1中(父窗口:)publicclassForm1:System.Windows.Forms.Form{privateSystem.Windows.Forms.ButtonbtnOpen;publicSystem.Windows.Forms.TextBoxtxtContent;//注意是public................[STAThread]staticvoidMain(){Application.Run(newForm1());}privatevoidbtnOpen_Click(objectsender,System.EventArgse){Form2frm=newForm2(this);frm.ShowDialog();}}Form2中(子窗口)publicclassForm2:System.Windows.Forms.Form{privateSystem.Windows.Forms.Buttonbutton1;privateSystem.Windows.Forms.TextBoxtxtValue;privateForm_parentForm=null;publicForm2(){InitializeComponent();}publicForm2(FormparentForm){InitializeComponent();this._parentForm=parentForm;}................//更新父窗口中文本框中的值!privatevoidbutton1_Click(objectsender,System.EventArgse){((Form1)_parentForm).txtContent.Text=this.txtValue.Text;}}一个小例子:将一个窗体下TextBox中的文本内容赋值给另一个窗体下的ListView中所对应的列。方法如下:将TextBox(命名为djzclx1)所在窗体Query_Djzclx.cs设置一个属性privatestringVarvalue;publicstringvarvalue{get{returnVarvalue;//返回值}}添加button1,其DialogResult属性设置为OK;然后在button1的单价事件里把TextBOx的值赋给Varvalue(Varvalue=djzclx1;),这样该窗体的属性varvalue就有TExtBox的值了。在ListView所在窗体添加button1,其单击事件添加如下代码:privatevoidCkDjzclx_Click(objectsender,EventArgse){Query_DjzclxnewFrmDjzclx=newQuery_Djzclx();//实例化对话框窗体if(newFrmDjzclx.ShowDialog()==DialogResult.OK)//如果对话框窗体点击的DialogoResult属性是“OK”的按钮{ListView.Text=newFrmDjzclx.varvalue;//这句的意思是这样,就是把属性varvalue的值回传给ListView。}}[推荐]C#窗体间传值方法大汇总(转)[问题点数:40分,结帖人happy09li]第一种方法:创建一个类,里面声明用于存储接收的字段。传的时候存储于字段中,要用的时候,直接类名.字段名进行调用。(这种方法传递是双向的)第二种方法:1.在Form1里定义publicstringName=*****2.在Form2里创建Form1对象,Form1f=newForm1();然后就可以通过f.Name取值了第三种方法:用构造函数在窗体Form2中intvalue1;stringvalue2;publicForm2(intvalue1,stringvalue2){InitializeComponent();this.value1=value1;this.value2=value2;}在窗体Form1中这样调用newForm2(111,222).Show();这样就把111,222,这2个值传送给了Form2d但是这样的传值是单向的第四种方法:通过窗体的公有属性值(特点:实现简单)举例“在窗体Form2中定义一个公有属性Form2Value,获取和设置textBox1的文本值publicstringForm2Value{get{returnthis.textBox1.Text;}set{this.textBox1.Text=value;}}在窗体Form1中这样调用Form2f2=newForm2();f2.Form2Value=Ok;//给Fo
本文标题:C#窗体间传值方法汇总
链接地址:https://www.777doc.com/doc-3383258 .html