Winform窗体之间传值方法探究
WinForm窗口之间传递参数的几种方法
WinForm窗口之间传递参数的几种方法。
(下面做了一个小示例,因其浅显易懂,就不加注释了。
若有疑问可给我发邮件@)using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WinPassValue{publicpartialclass MainForm : Form{public MainForm(){InitializeComponent();SelectedType();}publicdelegatevoid ChangeFormValue(string s1);//开始传递privatevoid btnPass_Click(object sender, EventArgs e) {if (cbmSelectedType.SelectedIndex == 3){Form3 f3 = new Form3(txtValue);f3.Show();}elseif (cbmSelectedType.SelectedIndex == 2){Form2 f2 = new Form2(txtValue.Text);f2.Show();}elseif (cbmSelectedType.SelectedIndex == 1){Program.yourName = txtValue.Text;Form1 f1 = new Form1();f1.Show();}//利用Show方法重载实现。
注意,此时要设置要传递控件访问权限为public 或 internalelseif (cbmSelectedType.SelectedIndex == 5){Form5 f5 = new Form5();f5.Show(this);}//委托事件传值elseif (cbmSelectedType.SelectedIndex == 4) {Form4 f4 = new Form4();//订阅事件f4.MyEvent +=new Form4.PassValue(myPassValue);f4.Show();}}//定义方法publicstring myPassValue(){return txtValue.Text.Trim();}//定义方法用于选择传递参数的方式privatevoid SelectedType(){string[] strValue = { "-请选择要传递的方式-","全局变量传递","构造函数传值","控件传值","委托事件传值","Show方法重载!"};cbmSelectedType.Items.AddRange(strValue); cbmSelectedType.SelectedIndex = 0;}privatevoid MainForm_Load(object sender, EventArgs e){}}}using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WinPassValue{publicpartialclass Form1 : Form{public Form1(){InitializeComponent();}privatevoid Form1_Load(object sender, EventArgs e){textBox1.ReadOnly = true;textBox1.Text = Program.yourName+"采用全局变量的方式实现!";}}}using System;using System.Collections.Generic; using ponentModel; using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WinPassValue{publicpartialclass Form2 : Form{public Form2(){InitializeComponent();}privatestring s2;public Form2( string s1){InitializeComponent();s2= s1;}privatevoid Form2_Load(object sender, EventArgs e){textBox1.ReadOnly = true;textBox1.Text = "“" + s2 + "”" + "采用构造函数实现!";}}}using System;using System.Collections.Generic;using ponentModel; using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WinPassValue{publicpartialclass Form3 : Form {public Form3(){InitializeComponent();}privatestring ss;public Form3(TextBox te){InitializeComponent();ss = te.Text; ;}privatevoid Form3_Load(object sender, EventArgs e){textBox1.ReadOnly = true;textBox1.Text = "“" + ss + "”" + "采用传递控件的方式实现!";}}}using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WinPassValue{publicpartialclass Form4 : Form{public Form4(){InitializeComponent();}//定义委托publicdelegatestring PassValue();//定义事件publicevent PassValue MyEvent;//委托事件传值privatevoid Form4_Load(object sender, EventArgs e){textBox1.ReadOnly = true;textBox1.Text=MyEvent()+"委托事件传值实现!";}}}using System;using System.Collections.Generic; using ponentModel; using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WinPassValue{publicpartialclass Form5 : Form{public Form5(){InitializeComponent();}//Show方法重载!privatevoid Form5_Load(object sender, EventArgs e){MainForm mf=(MainForm)this.Owner;textBox1.Text = ((TextBox)mf.txtValue).Text+"采用Show方法重载方式实现!";}}}当然还有其他的方法,欢迎大家互相交流学习!。
wpf 窗体间互相传值的方式 -回复
wpf 窗体间互相传值的方式-回复WPF (Windows Presentation Foundation) 是一种用于创建高级用户界面的开发框架。
在WPF 中,窗体之间的数据传递是一个常见的需求。
本文将介绍几种在WPF 中实现窗体间互相传值的方式,包括绑定、事件、委托和传统的参数传递。
首先,我们来探讨使用数据绑定在WPF 窗体间进行数据传递的方式。
在WPF 中,可以通过属性绑定将一个窗体的属性与另一个窗体的属性相关联。
这种方式非常简洁且高效。
首先,在发送数据的窗体中,我们需要将需要传递的属性设置为公共属性,并且使用INotifyPropertyChanged 接口来通知该属性的更改。
然后,在接收数据的窗体中,我们可以通过创建一个Binding 对象,并将相关属性与发送数据的窗体绑定,从而实现数据的传递。
其次,我们可以使用事件来实现窗体间的数据传递。
事件是一种在应用程序中引发和响应的动作。
在WPF 中,我们可以自定义事件,并在需要传递数据的窗体中引发该事件,在接收数据的窗体中注册对应的事件处理程序来接收数据。
通过这种方式,窗体之间可以实现松耦合的数据传递。
接下来,我们来介绍委托的使用。
委托是一种用于引用方法的类型。
在C# 中,我们可以使用委托来实现窗体间的数据传递。
首先,在发送数据的窗体中,我们需要定义一个委托,并且创建一个对应的事件。
然后,在接收数据的窗体中,我们可以为该委托注册一个方法作为事件处理程序,用于接收数据。
通过这种方式,窗体之间可以直接传递数据,实现及时的通信。
最后,我们可以使用传统的参数传递方式在窗体间传递数据。
在这种方式中,我们可以通过在启动新窗体时传递参数的方式实现数据的传递。
在发送数据的窗体中,我们需要在打开新窗体的代码中传递需要传递的数据。
然后,在接收数据的窗体中,我们可以通过构造函数或属性的方式接收该参数,并进行后续的处理。
这种方式虽然相对简单,但不够灵活,并且在传递大量数据时会导致代码冗长。
C#WinForm父窗体、子窗体之间的相互传值
C#WinForm⽗窗体、⼦窗体之间的相互传值本次⽰例效果如下:Form1为⽗窗体(包含textBox1、button1)Form2为⼦窗体(包含textBox2、button2)⽗窗体给⼦窗体传值==================1.点击Form1的button1 打开Form2⽗窗体给⼦窗体传值可以调⽤重载⼦窗体的构造函数直接传⼊相关数值public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){Form2 frm2 = new Form2(this.textBox1.Text);frm2.Show();}}public partial class Form2 : Form{public Form2(){InitializeComponent();}public Form2(string strTextBox1Text){InitializeComponent();this.textBox2.Text = strTextBox1Text;}}2.点击Form1的button1 打开Form2并调⽤⼦窗体Form2的公开属性或⽅法将Form1的textBox1的值设置给Form2的textBox2public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){Form2 frm2 = new Form2();frm2.TextBox2Text = this.textBox1.Text;frm2.Show();}}public partial class Form2 : Form{public Form2(){InitializeComponent();}public string TextBox2Text{set { this.textBox2.Text = value; }get { return this.textBox2.Text; }}}3.点击Form1的button1 打开Form2在Form2_Load调⽤⽗窗体Form1的公开属性或⽅法将Form1的textBox1的值设置给Form2的textBox2public partial class Form1 : Form{public Form1(){InitializeComponent();}public string TextBox1Text{set { this.textBox1.Text = value; }get { return this.textBox1.Text; }}private void button1_Click(object sender, EventArgs e){Form2 frm2 = new Form2();frm2.Show(this);//或 frm2.ShowDialog(this);////或者//Form2 frm2 = new Form2();//frm2.Owner = this;//frm2.Show();//或 frm2.ShowDialog();}}public partial class Form2 : Form{public Form2(){InitializeComponent();}private void Form2_Load(object sender, EventArgs e){Form1 frm1 = (Form1)this.Owner;this.textBox2.Text = frm1.TextBox1Text;}}⼦窗体给⽗窗体传值==================4.点击Form1的button1 打开Form2再点击Form2的button2在button2_Click事件中通过this.Owner将Form2的textBox2的值设置给Form1的textBox1并关闭Form2public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){Form2 frm2 = new Form2();frm2.Show(this);//或 frm2.ShowDialog(this);////或者//Form2 frm2 = new Form2();//frm2.Owner = this;//frm2.Show();//或 frm2.ShowDialog();}}public partial class Form2 : Form{public Form2(){InitializeComponent();}private void button2_Click(object sender, EventArgs e){Form1 frm1 = (Form1)this.Owner;//注意如果textBox1是放在panel1中的则先找panel1 再找textBox1((TextBox)frm1.Controls["textBox1"]).Text = this.textBox2.Text;this.Close();}}5.点击Form1的button1 打开Form2再点击Form2的button2在button2_Click事件中通过this.Owner及调⽤⽗窗体Form1的公开属性或⽅法将Form2的textBox2的值设置给Form1的textBox1并关闭Form2public partial class Form1 : Form{public Form1(){InitializeComponent();}public string TextBox1Text{set { this.textBox1.Text = value; }get { return this.textBox1.Text; }}private void button1_Click(object sender, EventArgs e) {Form2 frm2 = new Form2();frm2.Show(this);//或 frm2.ShowDialog(this);////或者//Form2 frm2 = new Form2();//frm2.Owner = this;//frm2.Show();//或 frm2.ShowDialog();}}public partial class Form2 : Form{public Form2(){InitializeComponent();}private void button2_Click(object sender, EventArgs e) {Form1 frm1 = (Form1)this.Owner;frm1.TextBox1Text = this.textBox2.Text;this.Close();}}。
visual studio 中两个窗体(winform)之间相互传值的方法
visual studio 中两个窗体(winform)之间相互传值的方法如何在Visual Studio中实现两个窗体(WinForm)之间的数值传递?1. 引言在Visual Studio中,WinForm是一种常用的图形用户界面设计工具,它可以帮助我们创建窗体应用程序。
有时候,我们需要在两个或多个窗体之间传递数据,以实现不同窗体之间的交互。
本文将介绍几种在Visual Studio中实现两个窗体之间数据传递的方法。
2. 通过构造函数传递数据通过构造函数传递数据是最简单和常见的方法之一。
我们可以在第二个窗体的构造函数中添加参数,用于接收从第一个窗体传递过来的数据。
下面是一个示例:```c#// 第一个窗体public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){string data = "Hello";Form2 form2 = new Form2(data);form2.Show();}}// 第二个窗体public partial class Form2 : Form{public Form2(string data){InitializeComponent();label1.Text = data;}}```在上面的示例中,通过在第二个窗体的构造函数中添加一个string类型的参数data,我们可以将第一个窗体中的数据传递给第二个窗体,并在第二个窗体中使用。
3. 使用属性传递数据另一种常见的方法是使用属性来传递数据。
我们可以在第一个窗体中定义一个公共属性,然后在第二个窗体中访问该属性并获取数据。
下面是一个示例:```c#// 第一个窗体public partial class Form1 : Form{public static string Data { get; set; }private void button1_Click(object sender, EventArgs e){Data = "Hello";Form2 form2 = new Form2();form2.Show();}}// 第二个窗体public partial class Form2 : Form{public Form2(){InitializeComponent();label1.Text = Form1.Data;}}```在上面的示例中,我们使用静态属性Data来传递数据。
c#WinForm窗体之间传值的几种方式(小结)
c#WinForm窗体之间传值的⼏种⽅式(⼩结)前⾔⼩编最近维护⼀个Winfrom窗体,是项⽬中CS端的主窗体,很多⼦窗体需要从主窗体获取值,同时⼦窗体还需要给主窗体回传值,下⾯来给⼤家介绍⼀下。
正⽂本⽂中以主窗体为frmMain,⼦窗体为frmGroup ,两窗体之间的传值来做⽰例。
⽅式⼀:使⽤公共静态变量传值主窗体frmMain中代码public partial class frmMain : Form{//声明⼯位ID 为公共静态变量public static string terminalID = "";//给静态变量赋值terminalID = "q13bh01-bh12";}⼦窗体frmGroup中代码private void frmGroup_Load(object sender, EventArgs e){this.txtTerminalID.Text= frmMain.terminalID.Trim();//可以再赋值给静态成员,⽅便其他窗体调⽤frmMain.terminalID = "q13bh01-bh11";}特点:双向传值,实现简单缺点:静态变量在类加载的时候分配内存,存储于⽅法区,⼀般不会被销毁,在系统不够内存情况下会⾃动回收静态内存,这样就会引起访问全局静态错误。
⽅式⼆:使⽤公共变量传值主窗体frmMain中代码public partial class frmMain : Form{//声明⼯位ID 为公共变量public string terminalID = "";//给变量赋值terminalID = "q13bh01-bh12";//单击‘⾏为'按钮的时候会给窗体传值private void btnGroup_Click(object sender, EventArgs e){frmGroup frmGro = new frmGroup();//变量传值,注意顺序写在ShowDialog()⽅法之前frmGro .stationID = this.terminalID;frmGro .ShowDialog();}}⼦窗体frmGroup中代码public partial class frmGroup : Form{//定义公共属性public string stationID = "";}特点:单向传值,只能主窗体给⼦窗体传值,实现简单⽅式三:使⽤委托传值先来看⼦窗体frmGroup中代码namespace Siemens.Simatic.GUIClient.MESClient{//1、声明⼀个委托public delegate void setTextValue(string textValue,bool flag);public partial class frmGroup : Form{//2、声明⼀个委托类型的事件public event setTextValue setFormTextValue;public string groupName = "";public bool flagBtnGroup = false;public frmGroup(){InitializeComponent();}//轮询‘⾏为'按钮(相当于按钮单击事件)private void tmrBtn_Tick(object sender, EventArgs e){if (sender is ButtonX) {ButtonX butX = (ButtonX)sender;//判断触发事件的是不是ButtongroupName = butX.Text.Trim();flagBtnGroup = true;//3、准备要回传的数据。
wpf 窗体间互相传值的方式
wpf 窗体间互相传值的方式摘要:一、wpf 窗体间传值的重要性二、wpf 窗体间传值的方式1.使用代码2.使用数据绑定3.使用事件4.使用数据共享正文:WPF(Windows Presentation Foundation) 是一种基于.NET Framework 的Windows 应用程序开发框架,它提供了许多强大的功能来创建具有丰富用户界面的应用程序。
在WPF 应用程序中,通常会有多个窗体,这些窗体之间需要进行数据传递,以便实现应用程序的功能。
本文将介绍WPF 窗体间传值的几种方式。
首先,使用代码是一种最直接的方式。
在WPF 中,每个窗体都是一个独立的类,因此可以通过编写代码来将数据从一个窗体传递到另一个窗体。
例如,在一个窗体中,可以创建一个数据项(例如一个文本框),然后使用代码将该数据项的值设置为另一个窗体的数据项。
这种方式的优点是简单直接,但需要编写额外的代码,不够灵活。
其次,使用数据绑定是另一种常用的方式。
WPF 支持数据绑定,可以将数据项的值绑定到另一个数据项。
例如,在一个窗体中,可以将一个文本框的值绑定到另一个窗体中的文本框。
这种方式的优点是可以自动更新数据,而且不需要编写额外的代码,但需要确保数据项的类型和名称相同。
第三,使用事件是另一种常用的方式。
在WPF 中,事件可以用来在窗体之间进行通信。
例如,在一个窗体中,可以创建一个按钮,并在按钮的Click 事件中编写代码,将数据传递到另一个窗体。
这种方式的优点是可以灵活地控制数据传递的时机和方式,但需要编写额外的代码。
最后,使用数据共享是另一种常用的方式。
WPF 支持数据共享,可以将数据存储在一个共享的位置,例如应用程序的数据存储中。
任何窗体都可以访问该数据,从而实现数据传递。
这种方式的优点是可以方便地共享数据,但需要确保数据的安全性和一致性。
综上所述,WPF 窗体间传值的方式有多种,具体选择哪种方式取决于应用程序的需求和窗体之间的通信机制。
窗体间的参数传递
get{returnpassword; }
internalset{ password = value; }
}
}
在其他代码中进行访问,
ername ="郑佐";
erRole ="dotnetlover";
stringusername = ername;
stringpassword = ParameterSettings.Password;
stringuserRole = erRole;
ername ="郑佐";//修改成新用户名
publicobjectMyParams
{
get{returnthis.myParams; }
set{this.myParams = value; }
}
(4)使用公共方法
使用公共方法类似于属性,对上面的同等实现如下,
//获取参数
publicobjectGetParams()
{
returnthis.myParams;
DialogResult result = dialog.ShowDialog(this);
if(result == DialogResult.OK)
{
if(this.textBoxPath.Text != dialog.SelectedPath)
}
//读取参数
publicstringChangedPath
{
get{returnthis.changedPath; }
}
}
以上参数类只包含一个修改后的路径参数。接下去我们要对原先的OptionForm窗体增加事件定义,这里使用.net2.0中提供的泛型类来实现。
C#开发Winform实现窗体间相互传值
C#开发Winform实现窗体间相互传值⽬录⼀、前⾔⼆、公共属性三、公共⽅法四、委托1、定义⼀个委托2、实例化⼀个此委托类型的事件3、定义要执⾏的⽅法4、将⽅法绑定到事件5、触发委托⼀、前⾔我们在做Winform窗体程序开发的时候,会经常遇到窗体之间相互传值。
假设有下⾯的⼀个场景:⼀个主窗体和⼀个⼦窗体,点击主窗体上⾯的按钮给⼦窗体传值,并在⼦窗体上⾯显⽰出来,⼀般会有如下⼏种⽅式实现。
⼆、公共属性我们可以在⼦窗体⾥⾯定义⼀个公共的属性,然后在⽗窗体⾥⾯给公共属性赋值,这样可以实现窗体之间传值,⼦窗体代码如下:using System;using System.Windows.Forms;namespace DelegateDemo{public partial class frmChild : Form{public frmChild(){InitializeComponent();}// 定义⼀个公共属性,接收传递的值public string strMessage { get; set; }/// <summary>/// 窗体加载/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void frmChild_Load(object sender, EventArgs e){// 将接收到的值显⽰在窗体上this.lblMessage.Text = strMessage;}}}⽗窗体代码:using System;using System.Windows.Forms;namespace DelegateDemo{public partial class frmParent : Form{public frmParent(){InitializeComponent();}/// <summary>/// <param name="sender"></param>/// <param name="e"></param>private void btn_Value_Click(object sender, EventArgs e){frmChild child = new frmChild();// 给窗体的公共属性赋值child.strMessage = this.txtMessage.Text.Trim();// 显⽰⼦窗体child.Show();}}}这种⽅式有⼀个缺点:属性需要设置为public,不安全。
Winform中多窗口传值问题的解决
Winform 中多个窗口传值的问题解决相信很多像我一样的菜鸟,在学习C#,学习winform程序开发时,都或多或少的遇到过多个窗口之间传值的问题。
比如,有一个主窗口,同时还有一个子窗口用来对设置主窗口的字体样式,背景颜色等。
此时就涉及到一个问题:如何将子窗口设置的信息反映到主窗体中呢?!今天,我就以一个菜鸟的身份来说说我的解决办法,或许让老鸟们见笑了。
好吧,大致内容如下:我们假设现在有一个主窗口叫做MainWindow,还有一个窗口的名称叫做SubWindow。
并且一开始两个窗口是没有关系的。
我们在MainWindow上放置一个Button控件,Name属性设置为SettingButton,Text属性设置为:设置主窗口。
接下来,我们来设置SubWindow,首先,在SubWindow 上放置两个标签(因为就是个demo,所以尽量简洁为好。
)分别设置Text属性为:设置主窗体的Title属性:,设置主窗体的BackgroudColor属性。
同时在相应的标签后面添加TextBox控件,分别设置Name属性为:setMainWindowTitle, setMainWindowBackcolor。
接下来,给SubWindow添加一个Button控件,Name = “confirmButton”, Text = “确认设置”。
然后再SubWindow.cs中添加如下代码://添加属性,记录设置主窗体名称。
public string MainWindowTitle{get; set;}//添加属性,记录设置主窗体背景色的值public Color MainWindowBackColor{get; set;}下面我们来看方法一、我们通过在单击主窗体的Button后,将子窗体以Dialog窗口的方式显示出来,然后在Dialog窗体关闭后,再进行处理。
当然这种方法有个弊端,就是当子窗口显示时,主窗口不能操作。
基于C的WinForm窗体传值方法探讨
基于C#的WinForm窗体传值方法探讨王彬(徐州财经高等职业技术学校,江苏徐州221008)摘要:基于C#的WinForm应用程序开发过程中经常用到窗体之间传值操作,通过对构造函数、属性、模态窗口、静态变量、委托事件和复制粘贴几种窗体间传值方法进行了分析和探讨,并在VS2008平台中验证了方法的可行性。
关键词:WinForm;窗体传值;静态变量;属性中图分类号:TP311文献标识码:A文章编号:1009-3044(2013)17-3999-02Discussion on C#WinForm Form by Value MethodWANG Bin(Xuzhou Vocational Technology Academy of Finace&Economics,Xuzhou221008,China)Abstract:Regarding forms by value operations frequently used duration application program development based on C#Win⁃Form,by analyzing and discussing several forms by value methods such as constructors,attribute,modal window,static variable, entrust incidents,copy and paste,it verifies the feasibility of this method on VS2008platform.Key words:WinForm;form by value;static variable;attribute目前,微软的.NET平台已经成为主流的开发平台,而C#是.NET平台的主流语言,且日益受到了程序员的喜爱。
在程序设计中,常需要把数据从一个窗体传递到另一个窗体中。
关于子窗体向父窗体传值方法
关于子窗体向父窗体传值方法第一种:Open1. 通过Opener方法调用父窗体方法传值父窗体1<html>2<head>3<meta http-equiv="Content-Type" content="text/html; charset=gb2312">4<title>父窗体</title>5</head>6<body>7<form name="form1" method='get'>8<input type=text name='txtvalue' value=''>9<input type='button'onclick='openWindow()' value="弹出">10</form>11<script type="text/javascript">12 function openWindow() {13window.open(子窗体.html','newWindow','height=300,width=300,scrollbars=auto');14 }15 function setValue(returnValue) {16document.getElementById('txtvalue').value= returnValue;17 }18</script>1920</body>21</html>子窗体1<html>2<head>3<meta http-equiv="Content-Type" content="text/html; charset=gb2312">4<title>子窗口</title>5 <script type="text/javascript">67 function valueExit() {8var returnValue= docment.getElementById('txtValue').value;9 opener.setValue(returnValue);10 window.close();11 }12 </script>13</head>14<body>15<h1 align='center'>子窗口!</h1><hr>16<div align='center'>17<form name="fz" action='#' method='get'>18<input type=text name='txtValue' id='txtValue'>19<input type='button'value='关闭' onclick='valueExit()'/>20</form>21</div>22</body>23</html>2.在子窗体里面用window.opener.document.from方法传值父窗体1<html>2<head>3<meta http-equiv="Content-Type" content="text/html; charset=gb2312">4<title>父窗体</title>5</head>6<body>7<form name="f1" action='#' method='get'>8<input type=text name='ft' value=''>9<input type='button'onclick='openWindow()' value="弹出"/>10</form>11<script type="text/javascript">12<!--13function openWindow() {14newWindow= window.open('z1.html','newWindow','height=300,width=300,scr ollbars=auto');15 if (newWindow != null) {16 newWindow.focus();17 }18}19//-->20</script>21</select>22</body>23</html>Code1<html>2<head>3<meta http-equiv="Content-Type" content="text/html;charset=gb2312">4<title>子窗口</title>5</head>6<body>7<h1 align='center'> 子窗口!</h1><hr>8<div align='center'>9<form name="fz" action='#' method='get'>10<input type=text name='tt'>11<input type='button'value='关闭' onclick='window.opener.document.f1.ft.value=document.fz.tt.value;self.close();' />12</form>13</div>14</body>15</html>扩展:子窗体关闭要刷新父窗体,在子窗体赋值的第一句加上opener.location= opener.location.href;第二种:ShowModalDialog1.window.returnValue方法传值父窗体1<html>2<head>3<script type="text/javascript">function fnOpen() {4var returnTarget= window.showModalDialog("zichuangti.aspx",'newWindow', 'dialogHeight=500px;dialogWidth=700px;center=yes;resizable= yes;help=no;');5if(returnTarget!= undefined && returnTarget.length > 0) {6document.getElementById("oArgs").value=returnTarget;7 }}8 </script>9</head>10<body>11 <form id="form1" runat="server">12 <div>13传过来的值:<input type="text" id="oArgs" runat ="server"/>14<input id="button" name="button"type="button"value="打开窗口"runat ="server" onclick="fnOpen()"/>15 </div>16 </form>1718</body>19</html>202122<html><head><script type="text/javascript">function exit(){window.returnValue = form1.txtreturn.value; //返回值window.close();}</script></head><body><form id="form1" runat="server"><div>传递过来的值: <input type="text" id="txtreturn" runat ="server"/><input id="button"name="button"type="button" value="关闭窗口" runat ="server" onclick="exit()"/> </div></form></body></html>扩展:子窗体关闭要刷新父窗体,在打开窗体的URL后面加上window.location.reload();本文作者:未知。
WinForm窗体间传值的方法
WinForm窗体间传值的⽅法本⽂实例讲述了WinForm窗体间传值的⽅法。
分享给⼤家供⼤家参考。
具体实现⽅法如下:窗体间传递数据,⽆论是⽗窗体操作⼦窗体,还是⼦窗体操作符窗体,有以下⼏种⽅式:1.公共静态变量;2.使⽤共有属性;3.使⽤委托与事件;4.通过构造函数把主窗体传递到从窗体中;⼀、通过静态变量特点:传值是双向的,实现简单实现代码如下:在⼀个app类中定义⼀个静态成员value复制代码代码如下:public class app{public static string value;}在窗体Form1中这样调⽤复制代码代码如下:app.value = "f2"; //给静态成员赋值new Form2 ( ).Show ( ); //显⽰Form2在窗体Form2中复制代码代码如下:this.Text = app.value; //取回app.value的值app.value = "Form2"; //给app.value赋值,以便其他窗体调⽤⼆、公共变量传值这种⽅法就是利⽤⼀个公共变量,先把需要的值存放到这个公共变量,然后需要的时候再通过读取该变量的值来使⽤例⼦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);}这种⽅式传值,理解和使⽤上都相对的简单,但是容易让变量串值,⽐如第⼀次修改为“a”,⽽第⼆次修改为“b”,则有可能本来需要“a”值的结果变成了“b”。
winform窗体传值的几种方式(属性赋值,委托,事件)
w inform窗体传值的几种方式(属性赋值,委托,事件)百度云盘代码下载:/share/link?shareid=388120&uk=3627406265 窗体设计:父窗体:子窗体:方法一:1、子窗体设置一个父窗体MainFrm属性:public MainFrm MainFrm { get; set; }2、在父窗体启动子窗体的时候:ChildFrm frm =new ChildFrm();frm.MainFrm = this;//将当前主窗体的实例传递给子窗体frm.Show();3、在子窗体同步按钮中://子窗体跟父窗体完全耦合在一块了。
MainFrm.txtName.Text = this.textBox1.Text;4、这样即可实现,在子窗体点击同步,子窗体文本框的值会同步到父窗体,但这种方式,子窗体跟父窗体完全耦合在一块了。
方法二、用委托来实现。
委托可以把一个方法作为参数带入另一个方法,在窗体传值中,子窗体需要执行一个方法来改变父窗体的值,而这个方法,则可以用委托从父窗体传递过来。
在父窗体中,声明修改文本框的方法AfterChildChange,在new一个子窗体的时候,将这个方法传递给子窗体。
那么当子窗体点击同步按钮时,会执行父窗体的AfterChildChange方法,已达到修改文本框值的目的。
1、在子窗体中设置一个委托类型的属性:public Action<string> AfterChangeTextDel { get; set; }2、在子窗体同步按钮中:if (AfterChangeTextDel != null){AfterChangeTextDel(this.textBox1.Text);//执行委托}3、在父窗体中添加方法:public void AfterChildChange(string text){txtName.Text = text;}4、在父窗体启动子窗体按钮:ChildFrm frm =new ChildFrm();frm.AfterChangeTextDel = new Action<string>(this.AfterChildChange);frm.Show();5、这样也能实现窗体传值,子窗体的委托可以在父窗体其他地方可以进行直接执行。
C#控制WinForm窗体间数据交互的方法
C#控制WinForm窗体间数据交互的方法本文将为大家介绍的是WinForm窗体之间的数据交互等问题,包括自定义一个构造函数等等问题。
在窗体间传递数据的方法比较多:1,在子窗体中自定义一个构造函数,参数类型是主窗体,当要显示子窗体的时候,就用这个构造函数来实例化子窗体,然后把this指针传进去,说起来太抽象了,我大概一写大家应该就明白了:1.public class frmMain:Form2. {3. ...4. frmControl controlForm=new frmControl(this);5. controlForm.Show();6. }7. public class frmControl:Form //子窗体,用来控制主窗体的某些显示!8. {9. private frmMain mainForm;10. public frmControl(frmMain mainForm)11. {12. this.mainForm=mainForm;13. }14. private void button1_Click(object sender,EventArgs e)15. {16.frmMain.textBox1.Text=this.textBox1.Text; //把子窗体的文本框值传递给主窗体的文本框!17. }18. }2,我个人感觉上面的方法不是很好,虽然实现起来很简单,只是想改变窗体的标题文本,就把整个主窗体的引用都传递给子窗体,这样的方式不是很幽雅,我们用接口来改进上面的方法,这样可以限制暴露给子窗体的功能,降低窗体之间的耦合度:1.public interface IChangeTitle:2. {3. void ChangeTitle(string title);4. }5. public class frmMain:Form,IChangeTitle6. {7. ...8. frmControl controlForm=new frmControl(this);9. controlForm.Show();10. public void ChangeTitle(string title)11. {12. this.Text=title;13. }14. }15. public class frmControl:Form //子窗体,用来控制主窗体的某些显示!16. {17. private IChangeTitle ichangeTitle;18. public frmControl(IChangeTitle ichangeTitle)19. {20. this.ichangeTitle=ichangeTitle;21. }22. private void button1_Click(object sender,EventArgs e)23. {24.ichangeTitle.ChangeTitle(this.textBox1.Text); //通过接口来调用方法25.26. }27.28. }3,为了进一步降低窗体之间的耦合度,我们可以用委托来实现这个需求:1.public partial class ChildForm : Form2. {3. public delegate void TitleChangedHandler(string title);4. public TitleChangedEventHandler TitleChanged;5. public ChildForm()6. {7. InitializeComponent();8. }9.10.11. private void btn_Ok_Click(object sender, EventArgs e)12. {13. if (TitleChanged != null)14. TitleChanged("Test Title"); //委托调用15.16. }17. }主窗体给委托变量赋值就可以了:1.public partial class MainForm : Form2. {3. private ChildForm loginForm = new ChildForm();4. public MainForm()5. {6. InitializeComponent();7.loginForm.TitleChanged = new ChildForm.TitleChangedEventHandler(FormTitleChanged);8. }9.10. protected void FormTitleChanged(string title)11. {12. this.Text = title;13. }14.15. private void button1_Click(object sender, EventArgs e)16. {17. loginForm.Show();18. }19. }4,也可以在子窗体中定义一个自定义的事件,然后自定义一个事件参数,用来传递你想传递的一些信息:1.public partial class ChildForm : Form2. {3. public class TitleChangedEventArgs : EventArgs //事件参数类4. {5. private string title = "";6. public string Title7. {8. get9. {10. return title;11. }13. {14. title = value;15. }16. }17. }18.public delegate void TitleChangedEventHandler(object sender, TitleChangedEventArgs e);19. public event TitleChangedEventHandler TitleChanged;20. public ChildForm()21. {22. InitializeComponent();23. }24.25.26. private void btn_Ok_Click(object sender, EventArgs e)27. {28. TitleChangedEventArgs e1=new TitleChangedEventArgs();29. e1.Title="Login sucessed";30. OnTitleChanged(e1);//触发事件31.32. }33.protected virtual void OnTitleChanged(TitleChangedEventArgs e) //触发事件的方法34. {35. if (TitleChanged != null)36. TitleChanged(this, e);38. }主窗体订阅这个事件就可以了:1.public partial class MainForm : Form2. {3. private ChildForm loginForm = new ChildForm();4. public MainForm()5. {6. InitializeComponent();7.loginForm.TitleChanged += new ChildForm.TitleChangedEventHandler(FormTitleChanged);8. }9.10. protected void FormTitleChanged(object sender, ChildForm.TitleChangedEventArgs e)11. {12. this.Text = e.Title;13. }14.15. private void button1_Click(object sender, EventArgs e)16. {17. loginForm.Show();18. }19. }。
C#Winform窗口之间传值的多种方法浅析(转)
C#Winform窗⼝之间传值的多种⽅法浅析(转)摘要这篇⽂章主要介绍了C# Winform窗⼝之间传值的多种⽅法浅析,本⽂起讲解了通过构造器传值、通过属性传递、通过事件携带参数传递等⽅法,需要的朋友可以参考下⼀般的⼯程都是多个form组成的,各个窗体之间经常要灵活的传递数据。
下⾯分享⼀点⾃⼰的经验:窗体传值的⽅法有很多,下⾯仅介绍我⽤过的⼀些,不知道官⽅叫这些什么⽅法,⼤家也可以找找看其他的。
通过构造器传值这是最简单的⼀种⽅式,例如我从form1中要传⼀个字符串去form2⾸先,在form2的构造器中稍作修改:复制代码代码如下:public Form2(String s){InitializeComponent();belRecieve.Text = s;}添加了⼀个string参数 s然后,在form1的click事件中,将要传递的参数传⼊,如下⽚断:复制代码代码如下:private void buttonShow_Click(object sender, EventArgs e){…Form2 f2;if (textBoxSend.Text == ""){f2 = new Form2("I'm from form1");}else{f2 = new Form2(textBoxSend.Text);}DialogResult r = f2.ShowDialog();//⾄于Show与ShowDialog就不⽤再说了吧…}在触发click事件的时候,form2就接受到f1传过去的textBoxSend.Text或者"I'm from form1",并且⽤labelRecieve去承接它。
这种⽅法,虽然简单⽅便,但是毕竟功能有限,当需要传递较⼤量的多样的数据时,⽤构造器就不能胜任了。
通过属性传递属性可以⽅便的传递多个数据(不就是添加多个属性么?),假设我要从form2传递某字符串到form3,⾸先我们为form3添加⼀个属性叫myString复制代码代码如下:public Form3(){InitializeComponent();}public string myString{get{return this.textBoxf3.Text;}set{if (value == null)textBoxf3.Text = string.Empty;elsetextBoxf3.Text = value;}}通过该属性去设置⽂本框的text.然后,在form2的点击事件中,只需令复制代码代码如下:f3.myString = "I'm from form2";这样也很⽅便,值得⼀提的是,这样通过属性传递的时候,即可以将数据从form2船到form3⼜可以从form3传回来。
主窗体向子窗体传递数据
C# 主子对话框数值传递在C# winform编程中,我们经常会遇到不同窗口间需要传递数值的问题.比如数据库的应用,主窗口填写内容num1,点击按钮,在弹出的子窗口显示对应num1值;或者在子窗口填写新注册用户名信息,在主窗口的dataGridView动态变化显示着新添加\修改的值;或者在修改信息时,输入用户编号”000001”在对应textBox中它的相应数据.显示如下图所示:以上应用都涉及到如何在两个不同窗口间传递数值,并实现动态的更新,下面就介绍我请教同学学到的一种主子对话框数值传递的知识,仅供大家学习!它是非常基础的C# winform知识,但也是非常有用的知识.一.建立主子对话框首先建立一个”Windows窗体应用程序”,然后主窗体Form1的界面如下图,然后添加一个子窗口,右键”解决方案”中项目名称,点击”添加”,新增一个”Windows窗体应用程序”,其中名称为”Form2.cs”界面设计如下图所示:点击主窗体中的”提交”按钮,填写如下代码就可实现在主窗体中调用子窗体的应用.它是在实例一个”Sub”的子窗体并显示.它的运行结果就是当用户点击"提交"按钮时就会弹出子对话框Form2,这就建立了C#主子对话框之间调用的关系.[csharp]view plaincopy1.//点击"提交"按钮2.private void button1_Click(object sender, EventArgs e)3.{4. Form2 Sub = new Form2();5. Sub.Show(); //显示子对话框内容6.}二.主对话框传值给子对话框下面需要介绍如何在子对话框中显示主对话框中提交的内容,点击Form2空白处,生成一个Load事件,添加如下代码,它的具体意思是:在子对话框”Form1”中声明主对话框”Form2”,然后在Form2的构造函数中给pall 赋值pall=f1;同时在载入Load事件中把”Form2”子对话框中的textBox1赋值为主对话框中提交的值.[csharp]view plaincopy1.public partial class Form2 : Form2.{3.//实例主窗体4. Form1 pall = new Form1();5.//构造函数修改6.public Form2(Form1 f1)7. {8. InitializeComponent();9. pall = f1;10. }11.//载入12.private void Form2_Load(object sender, EventArgs e)13. {14. textBox1.Text = pall.textBox1.Text;15. }16.}上面仅仅修改了子对话框中的内容,同时需要修改主对话框中的内容:1.把主对话框”Form1”中的textBox1控件设置为public.如下图所示.因为默认为Private(私有),只能在自己对话框和函数中修改,其他对话框要使用必须设置为public.2.由于Form2中的构造函数变成publicForm2(Form1f1)拥有参数,所以这里需要修改点击”提交”按钮中函数内容如下,把主窗体传递给子窗体.[csharp]view plaincopy1.//点击"提交"按钮2.private void button1_Click(object sender, EventArgs e)3.{4. Form2 Sub = new Form2(this);5. Sub.Show(); //显示子对话框内容6.}最后的运行结果如下图所示三.子对话框值修改主对话框亦更新实现子对话框中修改值,主对话框中的值也修改的动态更新,这能应用到很多实际项目中,比如主窗体显示库存信息,子窗体新加\删除\修改商品信息时,主窗体也要修改.首先方法同上,建立主子对话框,界面如下:总结下来就是3个步骤:1.主窗体Form1中调用子窗体Form2Form2fn2=new Form2(this);fn2.Show();2.设置Form1中的textBox1为public公有属性.同样的道理,如果想显示Form1中的其他控件(如dataGridView)、自定义变量或函数,只需要它声明为public即可子调用.3.在Form2子对话框中实例一个Form1主对话框,并直接对其主窗口进行修改.需要修改Form2的构造函数来调用Form1的public内容.其中Form2的代码如下,与上面中不同的是把主对话框中textBox1赋值即可.[csharp]view plaincopy1.public partial class Form2 : Form2.{3. Form1 pall = new Form1();4.public Form2(Form1 f1)5. {6. InitializeComponent();7. pall = f1;8. }9.//点击"提交" 内容显示到主窗口10.private void button1_Click(object sender, EventArgs e)11. {12. pall.textBox1.Text = textBox1.Text;13. }14.}运行结果如下:四.总结最后在主子对话框中传递数值的方法还有很多,比如使用Static定义或使用委托,在子窗体的构造函数中添加两个委托,一个用于调用主窗体给子窗体传值的方法,一个调用子窗体给主窗体传值的方法.即可实现两个窗体间数据交互.在CSDN论坛中我也见到一些这样的讨论/topics/320241861但是我还是认为我上面叙述的这种方法是非常有用的C#基础知识介绍,我仅仅是提供一种可行的方法,希望该文章能帮助到哪些还不知道如何在主子对话框中传递数值的同学朋友,最后还是感谢我的那个同学,他告诉我的这种方法.如果有错误或不足之处,见谅!。
总结C中窗体间传递数据的几种方法
[-1].(Item3);
}
.);
(this);
然后将Form1的构造函数改成可以接收几个参数的就行了。
2.假如主框架为Form1,打开的搜索对话框是Form2.直接在Form2类中申明一个Form1实例:
Form1 f仁new Form1();然后就可以通过f1来调用Form1中的域和函数了。其实不是这样的,你申明的新的Form1实例不是原来的那个For函数,
Form2 formChild = new Form2();
();
=n ull;
一}
}
}
}
文件
usi ng ;
usi ng ;
usi ng ;
using ZZ
{
public class Form2:{
private butt onOK;
private comp onents = n ull;
private listBoxFrm2;
们可以直接传递实例,来完成传递更多的信息。)
这样在Form2中使用myForm就可以对原来的Form1窗口进行操作了。但是你要把要操作的Form1
中的域和函数定义成public形式的(这样可能不安全),此时的myForm就是真正的最开始打开
的Form1了,你可以用这个实例来进行两个窗体的通讯了。()
private butt on Add;
private butt on Del;
private textBoxAdd;
public Form2()
In itializeComp onen t();
foreach(object o in
}
protected override void Dispose( bool dispos ing )
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
W_ n f o r m 窗体 之 间传 值 方 法探 究
吴 金 秀
( 黄 冈职 业技 术学 院 湖 北 黄 冈 4 3 8 0 0 2 ) 摘 要 Wi n f o e1 r 窗 体 以 图 形 用 户 界 面 方 式 直 观 的呈 现 了项 目应 用 中数 据 的 显 示 、 数 据 的输 入 等 功 能 有很 多项 目应 J } 】 P 多 个 窗体 之 间 不 是 独 立 的 , 多个 窗 体之 间 会 有数 据 的 传 递 亩体 之 间数 据 信 息的 传 递 与 称 为传债 , 文 章 就讨 论 了 最常 用的 四 种P v 『 J j ・ j S e e , l 『 】 I lI i l l ( I ( o i t h - ( ・ 1 s e l l l t t * l ’ E v , l l l !  ̄ l g _
{ l 1 ) I V l h l t  ̄ . T x l= ”&
“ ”
l } ' n l 1 a m P= f x f i 『 I J . T e x t , / / S e ( f l f l f J 刈 象 m1 1 n 0 Ⅲ 『 i f 悱 扶取 值 i f ' m. S P X=I x t S e x . _ r e x l ;/ / S e ( - ( 1 l / d刈 象f r i I I 的 I s I Ⅲ 『 l 1 | 】 j 『 J j — r l - 执 取 值 I n , 1 . S t aw r ( ) : }
j
J . 2为 S e c , i l l d窗怵 } f I 叫l 从 j 个 令¨ ! H 1 ] l i l T 1 r f 1 】 s c S e t ・ o n d _ l , , a r t 事 件 中 接 通 过 S l l  ̄ l l l l f " 和 1 S P X变 j 挟 墩 从 F i , ・ s I 窗体传人的价
S e e o mI i f ’ m = 1 1 ( W S e ( l l } I I l ( ) :
Wi n f o r m 窗体 可 以 实 现 数 据 的 输 入 、 数据的操作 、 示 等 功能, 在进 行数据处理时两 个窗体之 也需要 进行传值 一 个 窗体 要通 过 另 一 个 窗体 传过 来 的值 进 i - # l s # ; l f 9 处 下 文 讨 沦一个窗体将 用 输入 的姓 名、 性 别传 到另- - - 一 个窗体 中坪 显示 来 , 不同的需求下 可以对数据进行不同的处理 , 创 建一 个 Wi n f o n n窗体 应用程序 项 日.然 后添加 窗体 F o r m 2 。将 F o r m!窗体莺命 名为 F i r s t , F o r m 2窗体重命名为 S e c o n d F i r s t 窗体 中添加两个 标签、 两 个 文 本 框 和 一 个 按 钮 分 别 修 改 两 个 标 签 J 的 r e x t 属 性 为“ 姓名: ” 和“ 性别: ” : 设 置两- 4 、 文本 榧 的 N a m e属 悱 分 别为 t x t N a l l l和 t  ̄ t S e x :没置按钮 的 r e x t 属性 为 “ 将 值传刽 s 0 Ⅲ N a me 属性 为 b t n S e n d 如 1 所 示 S e ( n d商体 I I 添 加两 个标 签, 没置 l ' e x t 属性 分别为“ r h F i r s t 传人 的值为 : ” . 在 文本 框 用 于 输 入用 户 名 和性 别 , 川r l 单 n按 钮 时. 跳转 到 s mf I 窗体 , 并在 S e ( ' o n d窗{ 夺中显示 F i r s | 窗体 中输入的用 户名 和性 别. . 假 如在 F i r s t 窗体 中输入 姓名 J o h n , 性 别男 , 如阁 2所示 在 s o n d窗体 中 乐 “ 姓 名: J o h i 1性 别: 男” 实现将 F i r s t 商体传 人的值显示在 S e ( , O l l ( t 窗体的 办 法 有 以 F几 种 :
r ” i b l i ( ‘ f t l i aI r l a s s ㈩ : n pl i l , l i ( ’s i r i n g S t i l l I ¨ t :
..
p uh l i c s h’ i n g H Px :
p u b l i c H’ o n ( I ( j { l n i l i a l i z i ( : ・ I n / p , me n l 0 ;
传 值 方 法
关键词 W i n ) m1 窗体; 传值方法 ; 申 明 窗体 ; 公 共属 性 ; 重 载 传 参
中图 分 类 号 : T P3 l 1 . 1 l 文献标识码 : C
{
文章编号: 2 0 9 5 — 1 2 0 5 ( 2 0l 7 ) 0 3 — 4 3 — 0 2
SP X :
: ”+ S l l ; l l l 1 P + ”r 1 . 『 J : ”+
第5 1 苍 第 4期
2 0 1 7年 4 月
广 尔 蚕 业
( ; I J ANGD( ) NG CANyE
l l 51 、【 } _ ( 、l l 1 .2 { ) l 7
DOI :1 0 . 3 9 6 9 / j . i s s n . 2 0 9 5 — 1 2 0 5 . 2 0 1 7 . 0 4 . 3 3