主窗体向子窗体传递数据

C# 主子对话框数值传递
在C# winform编程中,我们经常会遇到不同窗口间需要传递数值的问题.比如数据库的应用,主窗口填写内容num1,点击按钮,在弹出的子窗口显示对应num1值;或者在子窗口填写新注册用户名信息,在主窗口的dataGridView动态变化显示着新添加\修改的值;或者在修改信息时,输入用户编号”000001”在对应textBox中它的相应数据.显示如下图所示:
以上应用都涉及到如何在两个不同窗口间传递数值,并实现动态的更新,下面就介绍我请教同学学到的一种主子对话框数值传递的知识,仅供大家学习!它是非常基础的C# winform知识,但也是非常有用的知识.
一.建立主子对话框
首先建立一个”Windows窗体应用程序”,然后主窗体Form1的界面如下图,然后添加一个子窗口,右键”解决方案”中项目名称,点击”添加”,新增一个”Windows窗体应用程序”,其中名称为”Form2.cs”界面设计如下图所示:
点击主窗体中的”提交”按钮,填写如下代码就可实现在主窗体中调用子窗体的应用.它是在实例一个”Sub”的子窗体并显示.它的运行结果就是当用户点击"提交"按钮时就会弹出子对话框Form2,这就建立了C#主子对话框之间调用的关系.
[csharp]view plaincopy
1.//点击"提交"按钮
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 plaincopy
1.public partial class Form2 : Form
2.{
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 plaincopy
1.//点击"提交"按钮
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);fn
2.Show();
2.设置Form1中的textBox1为public公有属性.同样的道理,如果想显示Form1中的其他控件(如dataGridView)、自定义变量或函数,只需要它声明为public即可子调用.
3.在Form2子对话框中实例一个Form1主对话框,并直接对其主窗口进行修改.需要修改Form2的构造函数
来调用Form1的public内容.
其中Form2的代码如下,与上面中不同的是把主对话框中textBox1赋值即可.
[csharp]view plaincopy
1.public partial class Form2 : Form
2.{
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#基础知识介绍,我仅仅是提供一种可行的方法,希望该文章能帮助到哪些还不知道如何在主子对话框中传递数值的同学朋友,最后还是感谢我的那个同学,他告诉我的这种方法.如果有错误或不足之处,见谅!。

合集下载

wpf 窗体间互相传值的方式

wpf 窗体间互相传值的方式

wpf 窗体间互相传值的方式WPF(Windows Presentation Foundation)是Microsoft推出的一种用于创建图形用户界面的框架。

在WPF中,窗体之间传值是一项非常常见的任务,可以通过多种方式来实现。

以下是几种常用的窗体间传值的方式。

1.构造函数传值:在创建新窗体的时候,可以通过构造函数来传递参数。

在要传值的窗体类中定义一个带参数的构造函数,并在打开新窗体的时候传入相应的值。

下面是一个示例:MainWindow.xaml.cs:```csharppublic partial class MainWindow : Window{public MainWindow(){InitializeComponent();}private void btnOpenWindow_Click(object sender, RoutedEventArgs e){//创建新窗体并传递参数ChildWindow childWindow = new ChildWindow("Hello World!");childWindow.ShowDialog();}}```ChildWindow.xaml.cs:```csharppublic partial class ChildWindow : Windowpublic ChildWindow(string value){InitializeComponent();//使用传递的参数label.Text = value;}}```2.属性传值:可以通过公共属性来传递数据。

在打开新窗体之前,设置目标窗体的属性值。

下面是一个示例:MainWindow.xaml.cs:```csharppublic partial class MainWindow : Windowpublic string Value { get; private set; }public MainWindow(){InitializeComponent();}private void btnOpenWindow_Click(object sender, RoutedEventArgs e){//设置目标窗体的属性值Value = "Hello World!";ChildWindow childWindow = new ChildWindow();childWindow.ShowDialog();}```ChildWindow.xaml.cs:```csharppublic partial class ChildWindow : Window{public ChildWindow(){InitializeComponent();//使用传递的参数label.Text =((MainWindow)Application.Current.MainWindow).Value;}}3.静态属性传值:使用静态属性来传递数据,可以避免创建新的窗体实例。

wpf 窗体间互相传值的方式

wpf 窗体间互相传值的方式

在WPF(Windows Presentation Foundation)中,窗体间互相传值的方式有多种。

以下是一些常用的方法:
1. 通过属性传递:可以通过在两个窗体之间创建公共属性或使用属性绑定,以便从一个窗体将值传递到另一个窗体。

这需要在两个窗体之间共享一个公共属性,并且需要在其中一个窗体中设置该属性的值,然后在另一个窗体中读取该值。

2. 通过事件传递:可以通过在源窗体中触发事件,并在目标窗体中订阅该事件来传递值。

源窗体可以在事件处理程序中设置事件数据,然后目标窗体可以从事件数据中读取该值。

3. 通过命令传递:可以使用命令绑定将一个窗体的命令与另一个窗体的命令关联起来。

源窗体中的命令可以传递值,而目标窗体可以通过命令参数接收该值。

4. 通过共享服务传递:可以在应用程序中创建一个共享服务,该服务可以包含一个属性或方法来存储和检索值。

然后,两个窗体都可以访问该服务以获取或设置值。

5. 通过数据绑定传递:可以使用数据绑定将一个窗体的数据源与另一个窗体的控件关联起来。

源窗体中的数据源可以更新值,而目标窗体中的控件会自动更新以反映该值。

这些方法可以根据具体的应用程序需求和架构选择适合的方法来传递值。

窗体之间传递值的几种方法

窗体之间传递值的几种方法

窗体之间传递值的⼏种⽅法窗体之间传递值的⼏种⽅法场景如下:我有⼀个mainFrm(⽗窗体),⼀个subFrm(⼦窗体)点击⽗窗体的按钮启动⼦窗体,点击⼦窗体的按钮可以给⽗窗体设置值。

如下图第⼀种⽅法:启动⼦窗体,将整个窗体(this)传递过去。

(不建议使⽤)步骤如下:1.在主窗体写⼀个函数SetText函数(这个地⽅也就是嵌⼊代码,你需要改那个窗体的内容,就在那个窗体写⼀个修改的函数。

public void SetText(string msg) //这个地⽅SetText是公有的{this.textBox1.Text = msg;}2.在new ⼦窗体的时候加⼊参数this.private void button1_Click(object sender, EventArgs e){subFrm frm = new subFrm(this); //这个⽅法的核⼼就是传递thisfrm.Show();}3.给⼦窗体添加构造函数重载(⼦窗体持有⼀个mainFrm类的变量parentFrm)。

public subFrm(mainFrm parentFrm):this(){this._parentFrm = parentFrm;}4.在⼦窗体的button事件上添加如下代码:private void button1_Click(object sender, EventArgs e){string sendText = this.textBox1.Text;this._parentFrm.SetText(sendText);}第⼆种:使⽤委托步骤如下:1.在主窗体写⼀个函数SetText函数(这个地⽅也就是嵌⼊代码,你需要改那个窗体的内容,就在那个窗体写⼀个修改的函数。

private void SetText(string msg){this.textBox1.Text = msg;}2.在⼦窗体⾥⾯定义⼀个委托(算是委托类吧), public delegate void SendMsgDelegate(string msg); 这个定义要和主函数的SetText⽅法⼀致(返回值是void,参数是string) 并且在定义⼀个委托(算是委托变量吧) public SendMsgDelegate sendMsg;⽤委托定义⼀个委托变量,这个委托变量只能接受返回值是void,参数是string的函数)。

C# 在不同窗体间传递数值的方法

C# 在不同窗体间传递数值的方法

C# 在不同窗体间传递数值的方法可以利用控件的属性在不同的窗体间传递数值,主要用于较少个数的数值传递。

做法是:要把窗体A的某个数据传递给窗体B,就在窗体A中,建立某一个控件的属性,获得这个数据。

在窗体B上,要进行获取窗体A上那个数据,引用窗体A上的那个控件的属性即可(注意:是在窗体B上,进行操作)。

例如,要把Form2上的TextBox1的Text值传给Form1中的Label1:以Form1为启动窗体。

在Form1中放一个Label1,将modifiers属性设为public;再放一个Button1,用于切换到Form2。

在Form2中放一个TextBox1,用于输入要传的值。

放一个Button1,用于向Form1传值并关闭Form2,切换回Form1。

让Form1的Button1点击事件执行:Form2 f2 = new Form2();f2.ShowDialog(this);让Form2的Button1点击事件执行:Form1 f1 = (Form1)this.Owner;bel1.Text= this.textBox1.Text;this.Close();运行时,先打开Form1, 点击Button1 ,这时Form2打开了,将要传输的值输入到Form2 的TextBox1的文本框中。

然后,在Form2 点击Button1 , 就将该值传到Form1的Label1。

从上面的《数值传递方法(一)》中,我们已经可以用最简单的方法来进行数据的传递。

本节将在前面的利用属性传递的基础上,进行进一步的探讨。

而所使用的是就是程序中最常用的方法。

其实说,利用方法来进行数值的传递,它的背后也是借住了属性传递的条件,才进行的。

但是这种方法用于要进行修改或是刷新数值比较多时,才会使用。

比如:在窗体A上打开的基础上,又打开了窗体B,而在窗体B上,重新刷新窗体A上的数值,需要这样做:在窗体A上,新建一个方法,方法将对数据传递的这个过程里程操作。

窗体间数据传递的方法

窗体间数据传递的方法

窗体间数据传递的方法1. 使用全局变量全局变量是在整个程序均可访问的变量,使用起来非常方便,可以在一个窗体中将数据存储到全局变量中,在另一个窗体中访问并使用该变量。

但是需要注意使用全局变量要小心,不要随意修改数据,以免影响整个程序的运行。

2. 使用构造函数传递数据在一个窗体中,可以使用构造函数传递数据给另一个窗体。

在第一个窗体中实例化第二个窗体时,将需要传递的数据传递给构造函数即可,并在第二个窗体的构造函数中接收数据。

3. 使用属性传递数据在一个窗体中,可以使用属性来存储需要传递的数据,并在另一个窗体中通过属性访问这些数据。

这种方法需要在第一个窗体中定义一个属性,并在第二个窗体中访问该属性。

4. 使用静态类传递数据静态类是在程序运行期间保持不变的类,可以使用静态类来传递数据。

定义一个静态类,在其中定义一个静态变量,将需要传递的数据存储到该变量中,然后在另一个窗体中访问该静态变量即可。

5. 使用委托传递数据委托是用来传递方法的一种类型,可以使用委托来在窗体之间传递数据。

定义一个委托,在其中定义一个方法接收需要传递的数据,在第一个窗体中实例化该委托并传递数据,然后在第二个窗体中使用该委托调用方法并获取数据。

6. 使用事件传递数据事件是一种在程序中响应特定条件的机制,可以使用事件在窗体之间传递数据。

在第一个窗体中定义一个事件,并在事件触发时传递需要传递的数据,在第二个窗体中订阅该事件并获取传递的数据。

7. 使用消息传递数据在Windows应用程序中,可以使用消息机制在窗体之间传递数据。

定义消息并发送到目标窗体,然后在目标窗体中处理该消息并获取传递的数据。

8. 使用文件传递数据可以使用文件来在窗体之间传递数据。

在第一个窗体中将数据写入到一个文件中,然后在第二个窗体中读取该文件并获取数据。

9. 使用数据库传递数据使用数据库来在窗体之间传递数据。

在第一个窗体中将数据存储到数据库中,在第二个窗体中从数据库中获取数据。

winform窗体传值的几种方式(属性赋值,委托,事件)

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#实现两个窗体之间数值传送的方法

C#实现两个窗体之间数值传送的⽅法本⽂实例讲述了C#实现两个窗体之间数值传送的⽅法。

分享给⼤家供⼤家参考,具体如下:以下是本⼈常⽤的⽅法,其实⽅法很多,但我觉得这两种我⽐较好理解,要是哪位朋友有⽐较简单的易懂的其他⽅法,希望不吝赐教。

⽅法⼀:⽐如要在FORM2⾥得到FORM1⾥的值,先在FORM1⾥定义⼀个公有的字符串复制代码代码如下:public string zhi="xxxxxx";然后FORM2⾥⽤FORM1去实例化⼀个对象复制代码代码如下:FORM1 f=new FORM1();最后⽤ f.zhi来取得FORM1⾥的值。

(f.Show()也是⼀个道理,即对象名.⽅法名)⽅法⼆:⽐如要在FORM1⾥得到FORM2⾥的值,利⽤GET,SET⽅法。

在FORM2⾥放⼀个TEXTBOX,写⼀个公有属性public string transsformValue{get{return this.textBox1.Text;}set{this.textBox1.Text=value;}}在FORM1⾥这么写(在⾥⾯也加⼀个TEXTBOX):.FORM2 f=new FORM2();f.transsformValue="aaaa";textBox1=f.transsformValue;f.Show();这样运⾏后是将FORM2的⽂本框的值设为“aaaa”,并且显⽰在FORM1⾥的⽂本框⾥实例演⽰FORM1⾥这么写: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 WindowsFormsApplication17{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){}private void button1_Click(object sender, EventArgs e) {InputBox f = new InputBox();f.Title = "请输⼊对话框";f.TipText = "请输⼊年龄";if (f.ShowDialog() == DialogResult.OK)bel1.Text = f.Message;}}}//InputBox的FORMl⾥这么写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 WindowsFormsApplication17{public partial class InputBox : Form{public InputBox(){InitializeComponent();}public string Title{set { this.Text = value; }}public string Message{get { return this.Input.Text; }}public string TipText{set { this.Tip.Text = value; }}private void InputBox_Load(object sender, EventArgs e) {this.AcceptButton = this.btnOK;this.CancelButton = this.btnCancel;this.btnOK.DialogResult = DialogResult.OK;this.btnCancel.DialogResult = DialogResult.Cancel;}}}运⾏效果截图如下:希望本⽂所述对⼤家C#程序设计有所帮助。

VisualStudio中两个窗体(WinForm)之间相互传值的方法

VisualStudio中两个窗体(WinForm)之间相互传值的⽅法编写WinowsForm应⽤程序时,实现两个窗体之间相互传递值的⽅法其实很简单。

以下⽤⼀个例⼦说明:在名为FormMain主窗体运⾏过程中利⽤名为FormInfo窗体,获取⽤户输⼊信息,并将这些信息返回给FormMain1. FormMain和FormInfo点击“修改...”按钮,显⽰FormInfo2. 设置FormInfo中buttonOK和buttonCancal的属性3. FormMain代码public partial class FormMain : Form{public FormMain(){InitializeComponent();}private void buttonInfo_Click(object sender, EventArgs e){// 实例化FormInfo,并传⼊待修改初值var formInfo = new FormInfo(labelInfo.Text);// 以对话框⽅式显⽰FormInfoif (formInfo.ShowDialog() == DialogResult.OK){// 如果点击了FromInfo的“确定”按钮,获取修改后的信息并显⽰labelInfo.Text = rmation;}}}4. FormInfo代码public partial class FormInfo : Form{public FormInfo(){InitializeComponent();}///<summary>///构造函数///</summary>///<param name="info">待修改的信息</param>public FormInfo(string info): this(){// 在TextBox中显⽰信息初值textBoxInfo.Text = info;}///<summary>///获取修改后的信息///</summary>public string Information{get { return textBoxInfo.Text; }}}5. 运⾏效果===========知识点延伸知识点1:FormMain和FormInfo是对象。

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”。

wpf 窗体间互相传值的方式

WPF 窗体间互相传值的方式在 WPF (Windows Presentation Foundation) 中,窗体间的数据传递是一个常见的需求。

不同窗体之间的数据传递可以通过多种方式实现,如使用属性、事件、委托、命令等。

本文将介绍几种常用的方式来实现 WPF 窗体间的数据传递。

1. 通过属性传值通过属性传值是最简单的一种方式,可以通过在窗体类中定义公共属性来传递数据。

下面是一个示例:public partial class MainWindow : Window{public string Data { get; set; }public MainWindow(){InitializeComponent();}private void OpenWindowButton_Click(object sender, RoutedEventArgs e){SecondWindow secondWindow = new SecondWindow();secondWindow.Data = Data;secondWindow.ShowDialog();}}在上述示例中,MainWindow类定义了一个名为Data的公共属性,用于传递数据。

当点击OpenWindowButton按钮时,创建一个SecondWindow实例,并将Data属性的值传递给SecondWindow实例。

2. 通过事件传值通过事件传值是另一种常见的方式,可以通过定义事件和事件处理程序来实现窗体间的数据传递。

下面是一个示例:public partial class MainWindow : Window{public event EventHandler<DataEventArgs> DataChanged;private string data;public string Dataget { return data; }set{data = value;OnDataChanged(new DataEventArgs(data));}}protected virtual void OnDataChanged(DataEventArgs e){DataChanged?.Invoke(this, e);}public MainWindow(){InitializeComponent();}private void OpenWindowButton_Click(object sender, RoutedEventArgs e) {SecondWindow secondWindow = new SecondWindow();DataChanged += secondWindow.MainWindow_DataChanged;secondWindow.ShowDialog();}}public class DataEventArgs : EventArgs{public string Data { get; set; }public DataEventArgs(string data){Data = data;}}public partial class SecondWindow : Window{public void MainWindow_DataChanged(object sender, DataEventArgs e){string data = e.Data;// 处理数据}在上述示例中,MainWindow类定义了一个名为DataChanged的事件,当Data属性的值发生变化时,会触发该事件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档