• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > c#窗体传值用法实例详解

c#窗体传值用法实例详解

作者:春哥也编程 字体:[增加 减小] 来源:互联网 时间:2017-05-28

春哥也编程 通过本文主要向大家介绍了c#窗体传值,c#窗体间传值,c#两个窗体间传值,c#跨窗体传值,c#中窗体传值等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例讲述了c#窗体传值用法。分享给大家供大家参考。具体分析如下:

对于窗体间的数据传递,是刚开始从事.Net窗体应用程序开发人员碰到的一个常见问题,在此讲几个常见的实现方式。此节内容适用于模式窗体或非模式窗体,部分方式延伸到一般类的操作。

(1)构造函数参数传递

通过构造函数传递参数应该是比较基本的参数传递方式,重载构造函数,通过带参数的构造函数来实例化窗体。

在窗体类内部定义参数变量,

private object myParams;

实现构造函数,

public OptionForm(object parameters) 
{ 
  InitializeComponent(); 
  this.myParams = parameters;//设置参数引用 
} 

</div>

实例化窗体,

OptionForm form = new OptionForm( myParams );

在实际使用过程中,需要注意传入的是引用类型还是值类型,处理方式会有所不同。

(2)使用窗体的属性

说起属性关联,上面已经提到过Form.Owner属性,下面笔者根据MSDN文档来比较完整的讲一下,大部分的文字来自MSDN文档,为保证其完整性,对其中一些属性描述进行了扩展。

Form.Owner 属性。获取或设置拥有此窗体的窗体。

语法,public Form Owner { get; set; }

若要使某窗体归另一个窗体所有,可为其 Owner 属性分配一个对将成为所有者的窗体的引用。当一个窗体归另一窗体所有时,它便随着所有者窗体最小化和关闭。例如,如果 Form2 归窗体 Form1 所有,则关闭或最小化 Form1 时,Form2 也会关闭或最小化。并且附属窗体从不显示在其所有者窗体后面。可以将附属窗体用于查找和替换窗口之类的窗口,当选定所有者窗体时,这些窗口不应消失。

Form.OwnedForms 属性。获取 Form 对象的数组,这些对象表示此窗体拥有的所有窗体。

语法,public Form[] OwnedForms { get; }

此属性返回包含此窗体拥有的所有窗体的数组。要使某窗体归另一个窗体所有,可调用 AddOwnedForm 方法。分配给所有者窗体的窗体将保持被拥有状态,直到调用了 RemoveOwnedForm 方法。如果窗体是多文档界面 (MDI) 父窗体,则除了当前打开的所有 MDI 子窗体外,此属性将返回所有显示的窗体。

Form.MdiChildren 属性。获取窗体的数组,这些窗体表示以此窗体作为父级的多文档界面 (MDI) 子窗体。

语法,public Form[] MdiChildren { get; }

此属性使您得以获取对当前在某 MDI 父窗体中打开的所有 MDI 子窗体的引用。若要创建 MDI 子窗体,请将要成为 MDI 父窗体的 Form 分配给该子窗体的 MdiParent 属性。可以使用此属性依次通过所有 MDI 子窗体,以执行一些操作,如当 MDI 父窗体关闭时将数据保存到数据库中,或者根据应用程序中执行的操作更新子窗体上的字段。

Form.MdiParent 属性。获取或设置此窗体的当前多文档界面 (MDI) 父窗体。

语法,public Form MdiParent { get; set; }

若要创建 MDI 子窗体,请将要成为 MDI 父窗体的 Form 分配给该子窗体的 MdiParent 属性。可以从某 MDI 子窗体使用此属性来获取所有子窗体都需要的全局信息或者调用对所有子窗体执行操作的方法。

Form.ActiveForm 静态属性。获取此应用程序的当前活动窗体。

语法,public static Form ActiveForm { get; }

表示当前活动窗体,或者如果没有活动窗体,则为空引用。可以使用此方法获得对当前活动窗体的引用,以在该窗体或其控件上执行操作。

Form.ActiveMdiChild 属性。获取当前活动的多文档界面 (MDI) 子窗口。

语法,public Form ActiveMdiChild { get; }

返回表示当前活动的 MDI 子窗口的 Form,或者如果当前没有子窗口,则返回 空引用。可使用此方法确定 MDI 应用程序中是否有任何打开的 MDI 子窗体。也可使用此方法从 MDI 子窗口的 MDI 父窗体或者从应用程序中显示的其他窗体对该 MDI 子窗口执行操作。

ContainerControl.ParentForm 属性。获取将容器控件分配给的窗体。

语法,public Form ParentForm { get; }

将容器控件分配给的 Form。

(3)使用公共属性(念时注:我比较常用这种方式)

使用公共属性也是一种比较常用的方式,通过窗体设计器添加的控件默认访问修饰符为private级别,可以设置成public或Internal(在程序集内部可见)来对外公开。比如对窗体中的Button进行公开,那就可以访问Button的相关属性,同时也可以注册事件或撤销事件注册。如:OptionForm form = new OptionForm();

form.buttonOK.Click += new EventHandler(buttonOK_Click); 
form.ShowDialog(); 

</div>

对于只允许读取访问或修改访问的控件或变量可以通过属性来控制。对(1)方式进行修改,去除重载构造函数,增加属性也可以实现同样的效果。

public object MyParams 
{ 
  get { return this.myParams; } 
  set { this.myParams = value; } 
} 

</div>

(4)使用公共方法

使用公共方法类似于属性,对上面的同等实现如下,

//获取参数 
public object GetParams() 
{ 
  return this.myParams; 
} 
//设置参数 
public void SetParams(object myParams ) 
{ 
  this.myParams = myParams; 
} 

</div>

(5)使用静态类该方式可以简单的理解为静态变量全局共享,通过下面代码能够比较清楚的理解,先来定义静态类,

public static class ParameterSettings 
{ 
  //公共静态变量 
  public static string Username = "Zhengzuo"; 
  //私有静态变量 
  private static string userRole = "Administrators"; 
  //私有静态变量 
  private static string password = "http://www.weikejianghu.com/"; 
  //内部属性 
  internal static string UserRole 
  { 
    get { return userRole; } 
  } 
  //公共属性 
  public static string Password 
  { 
    get { return password; } 
    private set { password = value; } 
  } 
} 

</div>

在需要访问的地方通过以下方式进行:

string username = ParameterSettings.Username; 
string password = ParameterSettings.Password; 
string userRole = ParameterSettings.UserRole; 
ParameterSettings.Username = "郑佐";//修改成新用户名 

</div>

(6)窗体实现Singleton模式

Singleton模式是我们开发过程中最常用的模式之一。在技术社区经常看到有人谈及对主窗体实现Singleton,但个人认为这不是一种妥当的做法,因为没有这个必要。这里通过另一个自定义类来进行演示。假设UserLoginInfo类用来保存登录系统后的用户凭据。

public class UserLoginInfo 
{ 
  //实现Singleton模式,线程安全。 
  private readonly static UserLoginInfo currentUserInfo = new UserLoginInfo(); 
  //提供全局访问点 
  public static UserLoginInfo CurrentUserInfo 
  { 
    get { return currentUserInfo; } 
  } 
  //阻止显式实例化,但不能阻止反射方式调用。 
  private UserLoginInfo() 
  { 
  } 
  //公共变量 
  public string Username; 
  //私有变量 
  private static string userRole; 
  //私有变量 
  private static string password; 
  //内部属性 
  internal string UserRole 
  { 
    get { return userRole; } 
    set { userRole = value; } 
  } 
  //公共属性 
  public string Password 
  { 
    get { return password; } 
    internal set { password = value; } 
  } 
} 

</div>

在其他代码中进行访问:

UserLoginInfo.CurrentUserInfo.Username ="郑佐"; 
UserLoginInfo.CurrentUserInfo.UserRole = "dotnetlover"; 
UserLoginInfo.CurrentUserInfo.Password = "http://www.weikejianghu.com/"; 

</div>

对于Singleton模式的实现方式有很多,编写时需要考虑是否需要保证实例访问的线程安全问题,以免引发不可预料的情况,为了提高性能可以考虑惰性实例化。

(7)发布事件进行订阅

通过事件来传递参数应该说是一种推的实现方式,在产生事件时进行被动的获取相关数据。这里将通过一个自定义事件来演示数据的传输。

在自定义事件时,标准的做法都会先定义一个事件参数类,要么直接使用基类EventArgs,或者从EventArgs继承实现自己的参数类,假设自定义基类取名为OptionSettingEventArgs,

//选项设置事件参数类 
public class OptionSettingEventArgs : EventArgs 
{ 
  private string changedPath; 
  //构造函数 
  public OptionSettingEventArgs(string changedPath) 
  { 
    this.changedPath = changedPath; 
  } 
  //读取参数 
  public string ChangedPath 
  { 
    get { return this.changedPath; } 
  } 
} 

</div>

以上参数类只包含一个修改后的路径参数。接下去我

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#实现窗口之间的传值
  • c#窗体传值用法实例详解
  • C#窗体传值实例汇总
  • C#实现.net页面之间传值传参方法汇总
  • C#传值方式实现不同程序窗体间通信实例

相关文章

  • 2017-05-28C#实现汉字转换为拼音缩写的代码
  • 2017-05-28DevExpress设置饼状图的Lable位置实例
  • 2017-05-28C#可空类型用法分析
  • 2017-05-28C#遍历得到checkboxlist选中值和设置选中项的代码
  • 2017-05-28C#中把任意类型的泛型集合转换成SQLXML数据格式的实例
  • 2017-05-28c#委托把方法当成参数(实例讲解)
  • 2017-05-28BootStrap mvcpager分页样式(get请求,刷新页面)
  • 2017-05-28可替代log4j日志的c#简单日志类队列实现类代码分享
  • 2017-05-28C#中Linq查询基本操作使用实例
  • 2017-05-28C#实现矩阵乘法实例分析

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#中的文件路径获取函数和文件名字获取函数小结
    • C#实现图片加相框的方法
    • C#特性之匿名方法和Lambda表达式
    • C#实现鼠标移动到曲线图上显示值的方法
    • C# 批量生成随机密码必须包含数字和字母并用加密算法加密
    • c#字符串编码编码(encoding)使用方法示例
    • 深入线程安全容器的实现方法
    • C#全角半角转换函数代码分享
    • C#中datatable去重的方法
    • 简单了解C#设计模式编程中的桥接模式

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有