电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > DOCX文档下载
分享到微信 分享到微博 分享到QQ空间

c#窗体间的数据交换

  • 资源ID:486937336       资源大小:81.87KB        全文页数:28页
  • 资源格式: DOCX        下载积分:20金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要20金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

c#窗体间的数据交换

在.net中轻松掌握Windows窗体间的数据交互(一)zhzuo (原作)来源:csdnWindows 窗体是用于 Microsoft Windows 应用程序开发的、基于 .NET Framework 的新平台。此框架提供 一个有条理的、面向对象的、可扩展的类集,它使您得以开发丰富的 Windows 应用程序。一个 Windows 窗体 就代表了 .NET架构里的Sys tem.Windows.Forms.Form类的一个实例。作者在CSDN技术论坛.NET板块下的C#分类经常看到有人问起如何在两个Form间传递数据,访问修改对方 窗体里面的值。对于有经验的程序员来说不是什么高深的东西,而对于初学者来说这些基础的东西往往是一个 问题,并且存在这种现象,往往比较复杂的东西他们会,要用什么了就去学什么,实际上并没有真正的去理解 掌握它,基础不扎实,所以就有了想通过自己对窗体编程积累的经验来写一些这方面的文章,以供学.NET的 朋友参考,也借此机会同各位朋友进行交流,写得不合理的地方请各位朋友提宝贵意见,下面我分了三个部分 来讲。使用带参数的构造函数我们要做的准备工作就是新建两个窗体,下面是两个窗体的布局,很简单:第一个例子说明:Forml为主窗体,包含控件:文本框textBoxFrml,多选框checkBoxFrml和按钮buttonEdit ;Form2 为子窗体,包含控件:文本框 textBoxFrm2,多选框 checkBoxFrm2 和按钮 buttonOK, buttonCancel。当我们新建一个窗体的时候,设计器会生成默认的构造函数:public Form2()InitializeComponent();它不带参数,既然我们要把Forml中的一些数据传到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)Form2 formChild = new Form2(this.textBoxFrm1.Text,this.checkBoxFrm1.Checked);formChild.ShowDialog();结果在预料之中,但是这里明显存在不足,在子窗体里的数据修改后不能传给主窗体,也就是说主窗体不受 子窗体的影响。而在实际的开发过程中我们经常使用子窗体来修改主窗体里面的数据,那怎么解决呢?在.NET中有两种类型,值类型和引用类型。值类型是从ValueType继承而来,而ValueType又是从 Object继承;对于引用类型它直接继承Object类型。这下让我们看看怎样通过Form2来修改Forml里的数据。还是让我们来修改 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;上面的代码我们通过把 textBoxFrm2 的 Text 和 checkBoxFrm2.Checked 赋给 textBoxFrml2 和 checkBoxFrml2 完成了对主窗体中的textBoxFrml和checkBoxFrm2的修改,因为textBoxFrml和textBoxFrml2是同一个引用, 而 checkBoxFrm2 和 checkBoxFrm12 也是。到这里为止功能是实现了,但是总觉得不是很合理,让两个窗体控件传来传去,现在我举一个恰当一点的例 子。DotNet-Ini|n| X|For«2修改了两个窗体:C#Asp. :amtWebService XML第二个例子说明:在这个例子中我们的两个窗体都加了一个ListBox用来显示ArrayList中的内容。 主窗体中控件: listBoxFrm1, buttonEdit;子窗体中控件: listBoxFrm2, textBoxAdd, buttonAdd, buttonEdit, buttonOK。 这次我们用 ArrayList 来作为传递数据,在 Form1 中定义类数据成员:private ArrayList listData1;在构造函数中增加了对listDatai进行内存分配,并生成数据最终绑定到listBoxFrml, public Form1()InitializeComponent();this.listDatai = new ArrayList();this.listData1.Add(C#);this.listData1.Add(Asp.net);this.listData1.Add(WebService);this.listData1.Add(XML); this.listBoxFrm1.DataSource = this.listData1; 另外,对修改按钮点击事件处理函数的修改如下: private void buttonEdit_Click(object sender, System.EventArgs e) Form2 formChild = new Form2(this.listData1); formChild.ShowDialog();this.listBoxFrm1.DataSource = null; this.listBoxFrm1.DataSource = this.listData1;相对与主窗体,对子窗体作相应修改,也在Form2中增加了类数据成员:private ArrayList listData2;用来保存对主窗体中 listData1 的引用。修改构造函数:public Form2(ArrayList listData)InitializeComponent();foreach(object o in this.listData2)this.listBoxFrm2.Items.Add(o);这里让 listData2 同 listData1 指向同一个引用;另外没有对 listBoxFrm 进行绑定,采用了填充 好了,下面是对数据操作的时候了。添加处理函数代码如下:private void buttonAdd_Click(object sender, System.EventArgs e)if(this.textBoxAdd.Text.Trim().Length>0)this.listData2.Add(this.textBoxAdd.Text.Trim(); this.listBoxFrm2.Items.Add(this.textBoxAdd.Text.Trim();elseMessageBox.Show( 请输入添加的内容!);删除处理代码如下:private void buttonDel_Click(object sender, System.EventArgs e)int index = this.listBoxFrm2.SelectedIndex;if(index!=-1)this.listData2.RemoveAt(index);this.listBoxFrm2.Items.RemoveAt(index);elseMessageBox.Show( 请选择删除项或者没有可删除的项!);退出 Form2 子窗体:private void buttonOK_Click(object sender, System.EventArgs e)this.Close();编译运行程序,在子窗体中对数据进行修改,关闭后,主窗体就会显示更新后的数据。这里有一点要提醒一下,比较两个例子,我们都传的是引用类型,一个是St ring,另一个是ArrayList,为 什么st ring类型不能修改主窗体的数据呢?其实在.Net中对st ring类型的修改并不是修改原来的值,原来 的值没有变化,而是重新生成一个新的字符串,下面是一个很好的说明。public class ZZConsoleSTAThreadstatic void Main(string args)string str1 = abc;string str2 = str1;str1 = 123;Console.WriteLine(str1);Console.WriteLine();Console.WriteLine(str2);Console.WriteLine();ArrayList al1 = new ArrayList();al1.Add(abc);ArrayList al2 = al1;al2.Add(123);foreach(o

注意事项

本文(c#窗体间的数据交换)为本站会员(人***)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.