ImageVerifierCode 换一换
格式:DOCX , 页数:43 ,大小:32.84KB ,
资源ID:19960877      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19960877.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(在net中轻松掌握Windows窗体间的数据交互Word文件下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

在net中轻松掌握Windows窗体间的数据交互Word文件下载.docx

1、它不带参数,既然我们要把Form1中的一些数据传到Form2中去,为什么不在Form2的构造函数里做文章呢? 假设我们要实现使Form2中的文本框显示Form1里textBoxFrm1的值,修改子窗体的构造函数:public Form2(string text) this.textBoxFrm2.Text = text;增加Form1中的修改按钮点击事件,处理函数如下:private void buttonEdit_Click(object sender, System.EventArgs e) Form2 formChild = new Form2(this.textBoxFrm1.Text

2、); formChild.Show();我们把this.textBoxFrm1.Text作为参数传到子窗体构造函数,以非模式方式打开,这样打开的formChild的文本框就显示了”主窗体”文本,是不是很简单,接下来我们传一个boolean数据给子窗体。Public Form2(string text,bool checkedValue) this.checkBoxFrm2.Checked = checkedValue;在主窗体中的修改按钮点击处理,我采用了打开模式窗口的方式,其实在这个例子中看不出有什么分别, Form2 formChild = new Form2(this.textBoxFr

3、m1.Text,this.checkBoxFrm1.Checked); formChild.ShowDialog();结果在预料之中,但是这里明显存在不足,在子窗体里的数据修改后不能传给主窗体,也就是说主窗体不受子窗体的影响。而在实际的开发过程中我们经常使用子窗体来修改主窗体里面的数据,那怎么解决呢? 在.NET中有两种类型,值类型和引用类型。值类型是从ValueType继承而来,而ValueType又是从Object继承;对于引用类型它直接继承Object类型。这下让我们看看怎样通过Form2来修改Form1里的数据。还是让我们来修改Form2的代码。Private TextBox text

4、BoxFrm12;private CheckBox checkBoxFrm12;public Form2(TextBox heckbo,CheckBox heckbox) this.textBoxFrm2.Text = heckbo.Text; this.checkBoxFrm2.Checked = heckbox.Checked; this.textBoxFrm12 = heckbo; this.checkBoxFrm12 = heckbox;现在我们传了两个引用类型的数据:TextBox类型,和CheckBox;另外在Form2中增加了两个类数据成员textBoxFrm12、checkBo

5、xFrm12用来分别保存构造函数传来的变量,不过他们并不属于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赋给textB

6、oxFrm12和checkBoxFrm12完成了对主窗体中的textBoxFrm1和checkBoxFrm2的修改,因为textBoxFrm1和textBoxFrm12是同一个引用,而checkBoxFrm2和checkBoxFrm12也是。到这里为止功能是实现了,但是总觉得不是很合理,让两个窗体控件传来传去,现在我举一个恰当一点的例子。修改了两个窗体:第二个例子在这个例子中我们的两个窗体都加了一个ListBox用来显示ArrayList中的内容。主窗体中控件:listBoxFrm1,buttonEdit;子窗体中控件:listBoxFrm2,textBoxAdd,buttonAdd,butt

7、onEdit,buttonOK。这次我们用ArrayList来作为传递数据,在Form1中定义类数据成员:private ArrayList listData1;在构造函数中增加了对listData1进行内存分配,并生成数据最终绑定到listBoxFrm1,public Form1() this.listData1 = new ArrayList(); this.listData1.Add(DotNet);C#AWebServiceXML this.listBoxFrm1.DataSource = this.listData1;另外,对修改按钮点击事件处理函数的修改如下: Form2 form

8、Child = new Form2(this.listData1); this.listBoxFrm1.DataSource = null;相对与主窗体,对子窗体作相应修改,也在Form2中增加了类数据成员:private ArrayList listData2;用来保存对主窗体中listData1的引用。修改构造函数:public Form2(ArrayList listData) this.listData2 = listData; foreach(object o in this.listData2) this.listBoxFrm2.Items.Add(o); 这里让listData2

9、同listData1指向同一个引用;另外没有对listBoxFrm进行绑定,采用了填充。好了,下面是对数据操作的时候了。添加处理函数代码如下:private void buttonAdd_Click(object sender, System.EventArgs e) if(this.textBoxAdd.Text.Trim().Length0) this.listData2.Add(this.textBoxAdd.Text.Trim(); this.listBoxFrm2.Items.Add(this.textBoxAdd.Text.Trim(); else MessageBox.Show(

10、请输入添加的内容!删除处理代码如下: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);请选择删除项或者没有可删除的项!退出Form2子窗体:编译运行程序,在子窗体中对数据进行修改,关闭后,主窗体就会显示更新后的数据。这里有一点要提醒一下,比较两个例子,我们都传的是

11、引用类型,一个是String,另一个是ArrayList,为什么string类型不能修改主窗体的数据呢?其实在.Net中对string类型的修改并不是修改原来的值,原来的值没有变化,而是重新生成一个新的字符串,下面是一个很好的说明。public class ZZConsole STAThread static void Main(string args) string str1 = abc; string str2 = str1; str1 = 123 Console.WriteLine(str1); Console.WriteLine(- Console.WriteLine(str2); A

12、rrayList al1 = new ArrayList(); al1.Add( ArrayList al2 = al1; al2.Add( foreach(object o in al1) Console.WriteLine(string)o); foreach(object o in al2) Console.ReadLine();运行一下看看输出结果就明白了,另外对值类型的数据操作要使用ref关键字。 总结,我们通过带参数的构造函数实现了窗体间的数据交互,代码看上去也比较清楚,在实际开发过程中,可以把DataSet,DataTable,或者是DataView当作参数,当然如果只是想修改一

13、行,可以传个DataRow或者DataRowView。二给窗体添加属性或方法1使用Form类的Owner属性获取或设置拥有此窗体的窗体。若要使某窗体归另一个窗体所有,请为其 Owner 属性分配一个对将成为所有者的窗体的引用。当一个窗体归另一窗体所有时,它便随着所有者窗体最小化和关闭。例如,如果 Form2 归窗体 Form1 所有,则关闭或最小化 Form1 时,也会关闭或最小化 Form2。并且附属窗体从不显示在其所有者窗体后面。可以将附属窗体用于查找和替换窗口之类的窗口,当选定所有者窗体时,这些窗口不应消失。若要确定某父窗体拥有的窗体,请使用OwnedForms属性。上面是SDK帮助文档

14、上讲的,下面我们就来使用它。首先还是使用第一篇文章中的第二个例子,窗体如下:主窗体中还是定义类数据成员, 在构造函数里实例化它,填充数据,最后绑定到listBoxFrm1。构造函数如下:public Form1() 主窗体的修改按钮处理函数:private void buttonEdit_Click(object sender, System.EventArgs e) Form2 formChild = new Form2(); formChild.Owner = this;我们设置了formChild.Owner为this,这样,子窗体和主窗体就有联系了, 当然我们也可以改成如下: form

15、Child.ShowDialog(this);不过这样还不行,目前主窗体的listData1变量外部访问不到, 必须修改为public访问修饰符, public ArrayList listData1;也可以通过属性(property)来实现, public ArrayList ListData1 getreturn this.listData1;这里我采用属性,感觉语法更灵活,清楚。下面是对Form2的修改, 构造函数又恢复原貌了。public Form2() 另外又新增了一个窗体的Load事件,在它的事件处理函数中来获取主窗体中的数据, private void Form2_Load(ob

16、ject sender, System.EventArgs e) Form1 pareForm = (Form1)this.Owner; this.listData2 = pareForm.ListData1; foreach(object o in this.listData2) 有人会问,为什么不把上面的代码放到构造函数里面去呢?如下不是更好, 那我会对你说错了,因为在主窗体修改按钮被点击后,开始执行 Form2 formChild = new Form2();而在Form2的实例化过程中会在构造函数中执行 Form1 pareForm = (Form1)this.Owner;而这时的th

17、is.Owner是没有值的,为空引用,那么下面的代码肯定也出问题, this.listData2 = pareForm.ListData1;foreach(object o in this.listData2) 当整个Form2实例化完成后,才会执行 formChild.Owner = this;这条代码,所以使用了Form2_Load事件。那怎样可以不使用Form2_Load事件呢?等下面我们来修改代码实现它。下面的子窗体代码没有变化, private void buttonAdd_Click(object sender, System.EventArgs e) 0) else private void buttonDel_Click(object sender, System.EventArgs e) =-1) 请选择删除项!private void buttonOK_Click(object sender, System.EventArgs e) 好了,结果同第一篇中的一样,子窗体能修改主窗体的值。2使用自定义属性或方法 下面我们来讲讲怎样使用自定义属性或方法来完成数据修改功能而不使用Form2_Load事件。主窗体的修改按钮点击处理函数如下: formChild.ListData2 = this.listData1; formChild.ShowDialo

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1