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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

窗体间的参数传递.docx

1、窗体间的参数传递窗体的参数传递对于窗体间的数据传递,是刚开始从事.Net窗体应用程序开发人员碰到的一个常见问题,在此讲几个常见的实现方式。此节内容适用于模式窗体或非模式窗体,部分方式延伸到一般类的操作。(1)构造函数参数传递通过构造函数传递参数应该是比较基本的参数传递方式,重载构造函数,通过带参数的构造函数来实例化窗体。在窗体类内部定义参数变量, private object myParams; 实现构造函数, public OptionForm(object parameters) InitializeComponent(); this.myParams = parameters;/设置参数

2、引用 实例化窗体, OptionForm form = new OptionForm( myParams ); 在实际使用过程中,需要注意传入的是引用类型还是值类型,处理方式会有所不同。 (2)使用窗体的属性说起属性关联,上面已经提到过Form.Owner属性,下面笔者根据MSDN文档来比较完整的讲一下,大部分的文字来自MSDN文档,为保证其完整性,对其中一些属性描述进行了扩展。 Form.Owner 属性。获取或设置拥有此窗体的窗体。语法,public Form Owner get; set; 若要使某窗体归另一个窗体所有,可为其 Owner 属性分配一个对将成为所有者的窗体的引用。当一个窗

3、体归另一窗体所有时,它便随着所有者窗体最小化和关闭。例如,如果 Form2 归窗体 Form1 所有,则关闭或最小化 Form1 时,Form2 也会关闭或最小化。并且附属窗体从不显示在其所有者窗体后面。可以将附属窗体用于查找和替换窗口之类的窗口,当选定所有者窗体时,这些窗口不应消失。 Form.OwnedForms 属性。获取 Form 对象的数组,这些对象表示此窗体拥有的所有窗体。语法,public Form OwnedForms get; 此属性返回包含此窗体拥有的所有窗体的数组。要使某窗体归另一个窗体所有,可调用 AddOwnedForm 方法。分配给所有者窗体的窗体将保持被拥有状态,

4、直到调用了 RemoveOwnedForm 方法。如果窗体是多文档界面 (MDI) 父窗体,则除了当前打开的所有 MDI 子窗体外,此属性将返回所有显示的窗体。 Form.MdiChildren 属性。获取窗体的数组,这些窗体表示以此窗体作为父级的多文档界面 (MDI) 子窗体。语法,public Form MdiChildren get; 此属性使您得以获取对当前在某 MDI 父窗体中打开的所有 MDI 子窗体的引用。若要创建 MDI 子窗体,请将要成为 MDI 父窗体的 Form 分配给该子窗体的 MdiParent 属性。可以使用此属性依次通过所有 MDI 子窗体,以执行一些操作,如当

5、MDI 父窗体关闭时将数据保存到数据库中,或者根据应用程序中执行的操作更新子窗体上的字段。 Form.MdiParent 属性。获取或设置此窗体的当前多文档界面 (MDI) 父窗体。语法,public Form MdiParent get; set; 若要创建 MDI 子窗体,请将要成为 MDI 父窗体的 Form 分配给该子窗体的 MdiParent 属性。可以从某 MDI 子窗体使用此属性来获取所有子窗体都需要的全局信息或者调用对所有子窗体执行操作的方法。Form.ActiveForm 静态属性。获取此应用程序的当前活动窗体。语法,public static Form ActiveForm

6、 get; 表示当前活动窗体,或者如果没有活动窗体,则为空引用。可以使用此方法获得对当前活动窗体的引用,以在该窗体或其控件上执行操作。 Form.ActiveMdiChild 属性。获取当前活动的多文档界面 (MDI) 子窗口。语法,public Form ActiveMdiChild get; 返回表示当前活动的 MDI 子窗口的 Form,或者如果当前没有子窗口,则返回 空引用。可使用此方法确定 MDI 应用程序中是否有任何打开的 MDI 子窗体。也可使用此方法从 MDI 子窗口的 MDI 父窗体或者从应用程序中显示的其他窗体对该 MDI 子窗口执行操作。 ContainerControl

7、.ParentForm 属性。获取将容器控件分配给的窗体。语法,public Form ParentForm get; 将容器控件分配给的 Form。以上属性MSDN提供相应的代码事例,可直接拿来调试使用。 (3)使用公共属性使用公共属性也是一种比较常用的方式,通过窗体设计器添加的控件默认访问修饰符为private级别,可以设置成public或Internal(在程序集内部可见)来对外公开。比如对窗体中的Button进行公开,那就可以访问Button的相关属性,同时也可以注册事件或撤销事件注册。如, OptionForm form = new OptionForm(); form.button

8、OK.Click += new EventHandler(buttonOK_Click); form.ShowDialog(); 对于只允许读取访问或修改访问的控件或变量可以通过属性来控制。对(1)方式进行修改,去除重载构造函数,增加属性也可以实现同样的效果。 public object MyParams get return this.myParams; set this.myParams = value; (4)使用公共方法使用公共方法类似于属性,对上面的同等实现如下, /获取参数 public object GetParams() return this.myParams; /设置参数

9、public void SetParams(object myParams ) this.myParams = myParams; (5)使用静态类该方式可以简单的理解为静态变量全局共享,通过下面代码能够比较清楚的理解,先来定义静态类, public static class ParameterSettings /公共静态变量 public static string Username = Zhengzuo; /私有静态变量 private static string userRole = Administrators; /私有静态变量 private static string passwo

10、rd = /内部属性 internal static string UserRole get return userRole; /公共属性 public static string Password get return password; private set password = value; 在需要访问的地方通过以下方式进行, string username = ParameterSettings.Username; string password = ParameterSettings.Password; string userRole = ParameterSettings.Use

11、rRole; ParameterSettings.Username = 郑佐;/修改成新用户名 (6)窗体实现Singleton模式 Singleton模式是我们开发过程中最常用的模式之一。在技术社区经常看到有人谈及对主窗体实现Singleton,但个人认为这不是一种妥当的做法,因为没有这个必要。这里通过另一个自定义类来进行演示。假设UserLoginInfo类用来保存登录系统后的用户凭据。 /*= 程序 郑佐 2006-4-23 =*/ public class UserLoginInfo /实现Singleton模式,线程安全。 private readonly static UserLo

12、ginInfo currentUserInfo = new UserLoginInfo(); /提供全局访问点 public static UserLoginInfo CurrentUserInfo get return currentUserInfo; /阻止显式实例化,但不能阻止反射方式调用。 private UserLoginInfo() /公共变量 public string Username; /私有变量 private static string userRole; /私有变量 private static string password; /内部属性 internal strin

13、g UserRole get return userRole; set userRole = value; /公共属性 public string Password get return password; internal set password = value; 在其他代码中进行访问, UserLoginInfo.CurrentUserInfo.Username =郑佐; UserLoginInfo.CurrentUserInfo.UserRole = dotnetlover; UserLoginInfo.CurrentUserInfo.Password = 对于Singleton模式的

14、实现方式有很多,编写时需要考虑是否需要保证实例访问的线程安全问题,以免引发不可预料的情况,为了提高性能可以考虑惰性实例化。关于Singleton模式的更多信息可以参考另一篇文章。 (7)发布事件进行订阅通过事件来传递参数应该说是一种推的实现方式,在产生事件时进行被动的获取相关数据。这里将通过一个自定义事件来演示数据的传输。在自定义事件时,标准的做法都会先定义一个事件参数类,要么直接使用基类EventArgs,或者从EventArgs继承实现自己的参数类,假设自定义基类取名为OptionSettingEventArgs, /选项设置事件参数类 public class OptionSetting

15、EventArgs : EventArgs private string changedPath; /构造函数 public OptionSettingEventArgs(string changedPath) this.changedPath = changedPath; /读取参数 public string ChangedPath get return this.changedPath; 以上参数类只包含一个修改后的路径参数。接下去我们要对原先的OptionForm窗体增加事件定义,这里使用.net 2.0中提供的泛型类来实现。 /定义事件 public event EventHandl

16、er OptionSettingChanged; 编写事件引发程序如下, /引发OptionSettingChanged事件 protected virtual void OnOptionSettingChanged(OptionSettingEventArgs e) if (OptionSettingChanged != null) OptionSettingChanged(this, e); 对文件目录选择按钮事件处理程序进行修改来实现事件激发,并没有考虑直接从文本框直接数据输入方式。 /通过目录对话框设置新的路径 private void buttonBrowser_Click(obje

17、ct sender, EventArgs e) FolderBrowserDialog dialog = new FolderBrowserDialog(); DialogResult result = dialog.ShowDialog(this); if (result = DialogResult.OK) if(this.textBoxPath.Text != dialog.SelectedPath) this.textBoxPath.Text = dialog.SelectedPath; OptionSettingEventArgs args = new OptionSettingEv

18、entArgs(dialog.SelectedPath); OnOptionSettingChanged(args); 好了,一切准备工作完成,调用代码如下, OptionForm form = new OptionForm(); /注册事件 form.OptionSettingChanged += new EventHandler (form_OptionSettingChanged); form.ShowDialog(); 通过以下事件处理程序来验证其正确性, private void form_OptionSettingChanged(object sender, OptionSettingEventArgs e) string newPath = e.ChangedPath; MessageBox.Show(this, String.Format(新路径为“0”。, newPath), 提示); 在实际开发过程中,合理的处理方式可能是以上几种方式的组合。对于窗体间的参数传递,我在另一篇文章中也有比较多的基础实例讲解。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2