欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【.net中Windows窗体间的数据交互】,下面是详细的分享!
.net中Windows窗体间的数据交互
Windows 窗体是用于 Microsoft Windows 应用程序开发的、基于 .NET Framework 的新平台。此框架提供一个有条理的、面向对象的、可扩展的类集,它使您得以开发丰富的 Windows 应用程序。一个Windows窗体就代表了.NET架构里的System.Windows.Forms.Form类的一个实例。
作者在CSDN技术论坛.NET板块下的C#分类经常看到有人问起如何在两个Form间传递数据,访问修改对方窗体里面的值。对于有经验的程序员来说不是什么高深的东西,而对于初学者来说这些基础的东西往往是一个问题,并且存在这种现象,往往比较复杂的东西他们会,要用什么了就去学什么,实际上并没有真正的去理解掌握它,基础不扎实,所以就有了想通过自己对窗体编程积累的经验来写一些这方面的文章,以供学.NET的朋友参考,也借此机会同各位朋友进行交流,写得不合理的地方请各位朋友提宝贵意见,下面我分了三个部分来讲。
一.使用带参数的构造函数
我们要做的准备工作就是新建两个窗体,下面是两个窗体的布局,很简单:
<第一个例子>
说明:Form1为主窗体,包含控件:文本框textBoxFrm1,多选框checkBoxFrm1和按钮buttonEdit;
Form2为子窗体,包含控件:文本框textBoxFrm2,多选框checkBoxFrm2和按钮buttonOK,buttonCancel。
当我们新建一个窗体的时候,设计器会生成默认的构造函数:
| 以下为引用的内容: public Form2() { InitializeComponent(); } |
它不带参数,既然我们要把Form1中的一些数据传到Form2中去,为什么不在Form2的构造函数里做文章呢?
假设我们要实现使Form2中的文本框显示Form1里textBoxFrm1的值,修改子窗体的构造函数:
| 以下为引用的内容: public Form2(string text) { InitializeComponent(); this.textBoxFrm2.Text=text; } |
增加Form1中的修改按钮点击事件,处理函数如下:
| 以下为引用的内容: private void buttonEdit_Click(object sender, System.EventArgs e) { Form2 formChild=new Form2(this.textBoxFrm1.Text); formChild.Show(); } |
我们把this.textBoxFrm1.Text作为参数传到子窗体构造函数,以非模式方式打开,这样打开的formChild的文本框就显示了”主窗体”文本,是不是很简单,接下来我们传一个boolean数据给子窗体。
Public Form2(string text,bool checkedValue)
| 以下为引用的内容: { InitializeComponent(); this.textBoxFrm2.Text=text; this.checkBoxFrm2.Checked=checkedValue; } |
在主窗体中的修改按钮点击处理,我采用了打开模式窗口的方式,其实在这个例子中看不出有什么分别,
| 以下为引用的内容: private void buttonEdit_Click(object sender, System.EventArgs e) |
结果在预料之中,但是这里明显存在不足,在子窗体里的数据修改后不能传给主窗体,也就是说主窗体不受子窗体的影响。而在实际的开发过程中我们经常使用子窗体来修改主窗体里面的数据,那怎么解决呢?
在.NET中有两种类型,值类型和引用类型。值类型是从ValueType继承而来,而ValueType又是从Object继承;对于引用类型它直接继承Object类型。这下让我们看看怎样通过Form2来修改Form1里的数据。
还是让我们来修改Form2的代码。
| 以下为引用的内容: Private TextBox textBoxFrm12; private CheckBox checkBoxFrm12; public Form2(TextBox heckbo,CheckBox heckbox) { InitializeComponent(); this.textBoxFrm2.Text=heckbo.Text; this.checkBoxFrm2.Checked=heckbox.Checked; this.textBoxFrm12=heckbo; this.checkBoxFrm12=heckbox; } |
现在我们传了两个引用类型的数据:TextBox类型,和CheckBox;另外在 Form2中增加了两个类数据成员textBoxFrm12、checkBoxFrm12用来分别保存构造函数传来的变量,不过他们并不属于Form2的 Controls容器。修改Form2的确定按钮点击事件函数:
| 以下为引用的内容: private void buttonOK_Click(object sender, System.EventArgs e) { this.textBoxFrm12.Text=this.textBoxFrm2.Text; this.checkBoxFrm12.Checked=this.checkBoxFrm2.Checked; this.Close(); } |
上面的代码我们通过把textBoxFrm2的Text和 checkBoxFrm2.Checked赋给textBoxFrm12和checkBoxFrm12完成了对主窗体中的textBoxFrm1和 checkBoxFrm2的修改,因为textBoxFrm1和textBoxFrm12是同一个引用,而checkBoxFrm2和 checkBoxFrm12也是。
以上所分享的是关于.net中Windows窗体间的数据交互,下面是编辑为你推荐的有价值的用户互动:
相关问题:c#多窗体之间数据交互访问有几种形式,分析优缺点
答:1.通过构造函数 特点:传值是单向的(不可以互相传值),实现简单 实现代码如下: 在窗体Form2中 int value1; string value2; public Form2 ( int value1 , string value2 ) { InitializeComponent ( ); this.value1 = value1; this.value2 = va... >>详细
相关问题:.net 2个窗体间 怎么传值
答:在Form1中定义 Public string value="happy"; 在form2中调用 Form1 f1=new Form1(); string NewValue=f1.value; 这个地址有相关知识 http://hi.baidu.com/yaobing0687/blog/item/772cebcb3c8e444cf31fe754.html >>详细
相关问题:ASP.NET页面间数据传递的几种方法
答:引言Web页面是无状态的, 服务器对每一次请求都认为来自不同用户,因此,变量的状态在连续对同一页面的多次请求之间或在页面跳转时不会被保留。在用ASP.NET 设计开发一个Web系统时, 遇到一个重要的问题是如何保证数据在页面间进行正确、安全和... >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
