知识大全 .Net中掌握Windows窗体间数据交互(2)
Posted 属性
篇首语:缺乏知识就无法思考,缺乏思考也就得不到知识。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 .Net中掌握Windows窗体间数据交互(2)相关的知识,希望对你有一定的参考价值。
.Net中掌握Windows窗体间数据交互(2) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
《 Net中掌握Windows窗体间数据交互( )》一文中我们讲了使用带参数的构造函数来实现窗体间的数据传递 我认为是用的比较多的一种 接下来让我们看看另外两种实现方法 二.给窗体添加属性或方法 .使用Form类的Owner属性 获取或设置拥有此窗体的窗体 若要使某窗体归另一个窗体所有 请为其 Owner 属性分配一个对将成为所有者的窗体的引用 当一个窗体归另一窗体所有时 它便随着所有者窗体最小化和关闭 例如 如果 Form 归窗体 Form 所有 则关闭或最小化 Form 时 也会关闭或最小化 Form 并且附属窗体从不显示在其所有者窗体后面 可以将附属窗体用于查找和替换窗口之类的窗口 当选定所有者窗体时 这些窗口不应消失 若要确定某父窗体拥有的窗体 请使用OwnedForms属性 上面是SDK帮助文档上讲的 下面我们就来使用它 首先还是使用第一篇文章中的第二个例子 窗体如下 > 说明 在这个例子中我们的两个窗体都加了一个ListBox用来显示ArrayList中的内容 主窗体中控件 listBoxFrm buttonEdit 子窗体中控件 listBoxFrm textBoxAdd buttonAdd buttonEdit buttonOK 主窗体中还是定义类数据成员 private ArrayList listData ; 在构造函数里实例化它 填充数据 最后绑定到listBoxFrm 构造函数如下 public Form () InitializeComponent(); this listData = new ArrayList(); this listData Add( DotNet ); this listData Add( C# ); this listData Add( ); this listData Add( WebService ); this listData Add( XML ); this listBoxFrm DataSource = this listData ; 主窗体的修改按钮处理函数 private void buttonEdit_Click(object sender System EventArgs e) Form formChild = new Form (); formChild Owner = this; formChild ShowDialog(); this listBoxFrm DataSource = null; this listBoxFrm DataSource = this listData ; 我们设置了formChild Owner为this 这样 子窗体和主窗体就有联系了 当然我们也可以改成如下 private void buttonEdit_Click(object sender System EventArgs e) Form formChild = new Form (); formChild ShowDialog(this); this listBoxFrm DataSource = null; this listBoxFrm DataSource = this listData ; 不过这样还不行 目前主窗体的listData 变量外部访问不到 private ArrayList listData ; 必须修改为public访问修饰符 public ArrayList listData ; 也可以通过属性(property)来实现 public ArrayList ListData getreturn this listData ; 这里我采用属性 感觉语法更灵活 清楚 下面是对Form 的修改 构造函数又恢复原貌了 public Form () InitializeComponent(); 另外又新增了一个窗体的Load事件 在它的事件处理函数中来获取主窗体中的数据 private void Form _Load(object sender System EventArgs e) Form pareForm = (Form )this Owner; this listData = pareForm ListData ; foreach(object o in this listData ) this listBoxFrm Items Add(o); 有人会问 为什么不把上面的代码放到构造函数里面去呢?如下不是更好 public Form () InitializeComponent(); Form pareForm = (Form )this Owner; this listData = pareForm ListData ; foreach(object o in this listData ) this listBoxFrm Items Add(o); 那我会对你说错了 因为在主窗体修改按钮被点击后 开始执行 Form formChild = new Form (); 而在Form 的实例化过程中会在构造函数中执行 Form pareForm = (Form )this Owner; 而这时的this Owner是没有值的 为空引用 那么下面的代码肯定也出问题 this listData = pareForm ListData ; foreach(object o in this listData ) this listBoxFrm Items Add(o); 当整个Form 实例化完成后 才会执行 formChild Owner = this; 这条代码 所以使用了Form _Load事件 那怎样可以不使用Form _Load事件呢?等下面我们来修改代码实现它 下面的子窗体代码没有变化 private void buttonAdd_Click(object sender System EventArgs e) if(this textBoxAdd Text Trim() Length> ) this listData Add(this textBoxAdd Text Trim()); this listBoxFrm Items Add(this textBoxAdd Text Trim()); else MessageBox Show( 请输入添加的内容! ); private void buttonDel_Click(object sender System EventArgs e) int index = this listBoxFrm SelectedIndex; if(index!= ) this listData RemoveAt(index); this listBoxFrm Items RemoveAt(index); else MessageBox Show( 请选择删除项! ); private void buttonOK_Click(object sender System EventArgs e) this Close(); 好了 结果同第一篇中的一样 子窗体能修改主窗体的值 .使用自定义属性或方法 下面我们来讲讲怎样使用自定义属性或方法来完成数据修改功能而不使用Form _Load事件 主窗体的修改按钮点击处理函数如下 private void buttonEdit_Click(object sender System EventArgs e) Form formChild = new Form (); formChild ListData = this listData ; formChild ShowDialog(); this listBoxFrm DataSource = null; this listBoxFrm DataSource = this listData ; 并且我们去掉了主窗体的ListData 属性 //public ArrayList ListData // // getreturn this listData ; // 而在子窗体中加上ListData 属性 public ArrayList ListData set this listData = value; foreach(object o in this listData ) this listBoxFrm Items Add(o); 也可以把属性改成方法 public void SetListData(ArrayList listData) this listData = listData; foreach(object o in this listData ) this listBoxFrm Items Add(o); 而在主窗体的修改按钮处理函数中也要相应改动 formChild ListData = this listData ; 改为 formChild SetListData(this listData ); 总结 我们通过Form类的Owner属性来建立主从窗体间的桥梁 这个是不是类似于把主窗体作为子窗体的构造函数参数传入实现的功能差不多 另外又采用了属性和方法来完成数据的交互 我觉得这种实现方法很实用 特别是用在不需要实例化类或著已经有了实例的情况下传递数据 下一篇文章我们来讲如何使用静态类来完成数据的交互 cha138/Article/program/Java/hx/201311/26383相关参考
.net中Windows窗体间的数据交互(一) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! W
ASP.NET可交互式位图窗体设计(下) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 维护两个
作者郑佐适用于Windows操作系统NETFrameworkx运行时环境NETWindows开发VisualStudio摘要本文阐述了在基于NET平台的Windows程序开发中使用模式窗体的诸多方
知识大全 增强的Windows窗体为.Net程序丰富用户界面
增强的Windows窗体为.Net程序丰富用户界面 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 VC.NET windows窗体应用程序调用GDAL的问题
VC.NETwindows窗体应用程序调用GDAL的问题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
使用ADO.NET2.0提升数据交互性能(2) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!三异步
ASP.NET窗体间传值实现方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 假设Parent
ASP.NET窗体间传值的方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!这篇文章介绍了ASPN
用VB.NET轻松制作特效窗体 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!体是Windows应用
使用ADO.NET2.0提升数据交互性能 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 前言&n