C#窗体间传值方法总结

假设我们需要点击主窗体FMMain中的某一个按钮时打开子窗体FMChild并将某一个值传给子窗体FMChild,一般情况下,我们点击按钮显示子窗体FMChild的代码为:

FMChild fmChild = new FMChild();

fmChild.ShowDialog();

fmChild.Dispose();

如果我们需要将主窗体FMMain中的string strValueA的值传给FMChild,那么我们首先对strValueA进行如下处理:

private string strValueA;

public string StrValueA

{

get

{

return strValueA;

}

set

{

strValueA = value;

}

}

使其成为主窗体FMMain的一个属性,接着修改显示子窗体的代码为以下两种的其中一种。

方法一:

FMChild fmChild = new FMChild();

fmChild.ShowDialog(this);

fmChild.Dispose();

方法二:

FMChild fmChild = new FMChild();

FMChild.Owner = this;

fmChild.ShowDialog();

fmChild.Dispose();

然后在修改子窗体FMChild中申明一个主窗体FMMain对象,

FMMain fmMain;

在需要使用主窗体FMMain的string strValueA的地方加上如下代码:

fmMain = (FMMain)this.Owner;

这样,就可以获得主窗体FMMain中strValueA的值了。

这时,如果你需要将子窗体FMChild中的string strValueB传给主窗体FMMain,同样处理string strValueB。

private string strValueB;

public string StrValueB

{

get { return strValueB; }

set { strValueB = value; }

}

那么你在关闭子窗体代码fmChild.Dispose();后,可以写一些代码来保存或者处理FMChild的strValueB,例如:

string strTmp = fmChild.StrValueB;

注意,在Visual C#智能设备Pocket PC 2003设备应用程序中显示子窗体FMChild只能使用:

FMChild fmChild = new FMChild();FMChild.Owner = this;fmChild.ShowDialog();fmChild.Dispose();

在Visual C#智能设备Pocket PC 2003的设备应用程序中ShowDialog()没有重载。

C#窗体间传值的几种方法

调用窗体(父):Form1,被调用窗体(子):Form2

方法1: 所有权法

//Form1:

//需要有一个公共的刷新方法

public void Refresh_Method()

{

//...

}

//在调用Form2时,要把Form2的所有者设为Form1

Form2 f2 = new Form2() ;

f2.Owner = this;

f2.ShowDialog() ;

//Form2:

//在需要对其调用者(父)刷新时

Form1 f1 ;

f1 = (Form1)this.Owner;

f1.Refresh_Method() ;

方法2:自身传递法

//Form1:

//需要有一个公共的刷新方法

public void Refresh_Method()

{

//...

}

Form2 f2 = new Form2() ;

f2.ShowDialog(this) ;

//Form2:

private Form1 p_f1;

public Form2(Form1 f1)

{

InitializeComponent();

p_f1 = f1;

}

//刷新时

p_f1.Refresh_Method() ;

方法3:属性法

//Form1:

//需要有一个公共的刷新方法

public void Refresh_Method()

{

//...

}

//调用时

Form2 f2 = new Form2() ;

f2.P_F1 = this;

f2.Show() ;

//Form2:

private Form1 p_f1;

public Form1 P_F1

{

get{return p_f1;}

set{p_f1 = value;}

}

//刷新时

p_f1.Refresh_Method() ;

方法4:委托法

//声明一个委托

public delegate void DisplayUpdate();

//Form1:

//需要有一个公共的刷新方法

public void Refresh_Method()

{

//...

}

//调用时

Form2 f2 = new Form2() ;

f2.ShowUpdate += new DisplayUpdate(Refresh_Method) ;

f2.Show() ;

//Form2:

//声明事件

public event DisplayUpdate ShowUpdate;

//刷新时,放在需要执行刷新的事件里

ShowUpdate();

Form1中放一个Label1,一个Button1,Form1为主窗口,当点击Button1时,执行:

Form2 f2 = new Form2();

f2.ShowDialog(this);

Form2中放一个TextBox1,一个Button1,当点击Button1时执行:

Form1 f1 = (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;然后添加一个构造函数:

//定义一个变量,用来传值。

public string returnValue ;

public Form2(string txtValue)

{

InitializeComponent();

this.textBox1.Text = txtValue;

}

然后在button1的单击事件中添加如下代码:

private void button1_Click(object sender, EventArgs e)

{

returnValue = this.textBox1.Text;

this.Close();

}

3:Form1中添加一个textBox:textBox1;添加一个Button:button1;然后在button1的单击事件中添加如下代码:

private void button1_Click(object sender, EventArgs e)

{

string txtValue = this.textBox1.Text;

Form2 f2 = new Form2(txtValue);

f2.ShowDialog();

this.textBox1.Text = f2.returnValue;

}

Form1 中 (父窗口:)

public class Form1 : System.Windows.Forms.Form

{

private System.Windows.Forms.Button btnOpen;

public System.Windows.Forms.TextBox txtContent; //注意是public

........

........

[STAThread]

static void Main()

{

Application.Run(new Form1());

}

private void btnOpen_Click(object sender, System.EventArgs e)

{

Form2 frm=new Form2(this);

frm.ShowDialog();

}

}

Form2中(子窗口)

public class Form2 : System.Windows.Forms.Form

{

private System.Windows.Forms.Button button1;

private System.Windows.Forms.TextBox txtValue;

private Form _parentForm=null;

public Form2()

{

InitializeComponent();

}

public Form2(Form parentForm)

{

InitializeComponent();

this._parentForm =parentForm;

}

........

........

//更新父窗口中文本框中的值!

private void button1_Click(object sender, System.EventArgs e)

{

((Form1)_parentForm).txtContent.Text =this.txtValue .Text ;

}

}

一个小例子:将一个窗体下TextBox中的文本内容赋值给另一个窗体下的ListView中所对应的列。

方法如下:

将TextBox(命名为djzclx1)所在窗体Query_Djzclx .cs设置一个属性

private string Varvalue;

public string varvalue

{

get

{

return Varvalue;//返回值

}

}

添加button1,其DialogResult属性设置为OK;

然后在button1的单价事件里把TextBOx的值赋给Varvalue(Varvalue=djzclx1;),这样该窗体的属性varvalue就有TExtBox的值了。

在ListView所在窗体添加button1,其单击事件添加如下代码:

private void CkDjzclx_Click(object sender, EventArgs e)

{

Query_Djzclx newFrmDjzclx = new Query_Djzclx();//实例化对话框窗体

if (newFrmDjzclx.ShowDialog() == DialogResult.OK)//如果对话框窗体点击的DialogoResult属性是“OK”的按钮

{

ListView.Text = newFrmDjzclx.varvalue; //这句的意思是这样,就是把属性varvalue的值回传给ListView。

}

}

时间: 2024-12-20 20:35:26

C#窗体间传值方法总结的相关文章

C# 窗体间传值方法大汇总

第一种方法:创建一个类,里面声明用于存储接收的字段.传的时候存储于字段中,要用的时候,直接类名.字段名 进行调用.(这种方法传递是双向的) 第二种方法:1.在Form1里定义 public string Name = "*****" 2. 在Form2里创建Form1对象, Form1 f = new Form1(); 然后就可以通过f.Name取值了 第三种方法:用构造函数在窗体Form2中 int value1; string value2; public Form2 ( int 

C# 窗体间传值方法大汇总(转)

第一种方法:创建一个类,里面声明用于存储接收的字段.传的时候存储于字段中,要用的时候,直接类名.字段名 进行调用.(这种方法传递是双向的) 第二种方法:1.在Form1里定义 public string Name = "*****" 2. 在Form2里创建Form1对象, Form1 f = new Form1(); 然后就可以通过f.Name取值了 第三种方法:用构造函数在窗体Form2中 int value1; string value2; public Form2 ( int 

WinForm窗体显示和窗体间传值[转载]

以前对WinForm窗体显示和窗体间传值了解不是很清楚 最近做了一些WinForm项目,把用到的相关知识整理如下 A.WinForm中窗体显示 显示窗体可以有以下2种方法: Form.ShowDialog方法 (窗体显示为模式窗体) Form.Show方法 (窗体显示为无模式窗体) 两者具体区别如下: 1.在调用Form.Show方法后,Show方法后面的代码会立即执行 2.在调用Form.ShowDialog方法后,直到关闭对话框后,才执行此方法后面的代码 3.当窗体显示为模式窗体时,单击“关

C# winform窗体间传值(使用委托或事件)

窗体间传值 今天得空,刚好看到网上好多人再找winform窗体间传值的问题,由于昨天项目的优化的感觉不错,就写了个C# winform窗体间传值的demo,希望能给需要的人的带来帮助: 工程的源代码地址:https://github.com/yes-or-no/WinFormTransValueDemoByDelOrEvent.git C#winform窗体间传值,三种方法示例,注释详细.使用方法:使用vs2013打开编译运行即可: 工程中总共介绍了三种方法:###方法1:通过保存对象的引用调用

winform 窗体间传值

WinForm 两窗体之间传值实例 2010-12-27 22:10:11|  分类: 学业|举报|字号 订阅 下载LOFTER我的照片书  | 窗体Form1和Form2 Form2由Form1打开(1.模式窗体 2.非模式) Form2的TextBox值传回Form1的TextBox中 Form1:       public partial class Form1 : Form         {             public Form1()             {       

窗体间传值(转载)尚待考证

窗体间传值要弄清楚到底是哪个对象的问题,否则容易传错值.就比如窗体对象loginFrm为登陆窗体,想把当前的登陆用户信息传递给主窗体mainFrm,但是却实例了一个新的对象loginFrm把里头的信息传递给了mainFrm,所以得到了一空值,颇有刻舟求剑的味道,不同的内存空间就比如湖水的宽广一样,存放着不同的对象,彼此要分清楚.窗体传值的前提是,要传的字段,在类里面的访问修饰符必须是public(如果在源窗体内传值则例外,参见下列常用方法2).常用的方法:1.    静态变量,在窗体里Class

[第一篇-转载]WinForm窗体显示和窗体间传值总结

[转自http://blog.csdn.net/dongdingbaihe/article/details/3701639] A.WinForm中窗体显示  显示窗体可以有以下2种方法:  Form.ShowDialog方法 (窗体显示为模式窗体)  Form.Show方法 (窗体显示为无模式窗体) 两者具体区别如下:  1.在调用Form.Show方法后,Show方法后面的代码会立即执行  2.在调用Form.ShowDialog方法后,直到关闭对话框后,才执行此方法后面的代码  3.当窗体显

C#父、子窗体间传值等

这是老生常谈的一个问题,百度上太多方法了,对错先不说.只想介绍最简单.明了的方法 这里介绍两种方法: 1.无参 2.有参 前提: 1.不管什么方法,窗体间传值,要被调用 的方法.控件.函数等等,修饰符都要先设置为Public 2.新建父.子两个窗体 主窗体 Main: 子窗体 Child: 一,无参(大部分人喜欢用这种) 只介绍一点:Owner属性,VS的解释:获取或者设置拥有此窗体的窗体   ,换种通俗的说法,说明它支持读取和修改. Main后台代码: namespace MainChild

JAVASCRIPT实现的WEB页面跳转以及页面间传值方法

在WEB页面中,我们实现页面跳转的方法通常是用LINK,BUTTON LINK ,IMG LINK等等,由用户点击某处,然后直接由浏览器帮我们跳转. 但有时候,需要当某事件触发时,我们先做一些操作,然后再跳转,这时,就要用JAVASCRIPT来实现这一跳转功能. 下面是具体的做法: 一:跳转到新页面,并且是在新窗口中打开时: 复制代码 代码如下: function gogogo() { //do someghing here... window.open("test2.html");