在面向过程的程序中,我们可以通过窗体名来访问其他窗体中控件或者数据,但是在面向过程中却稍有不同,面向过程显示了它的优点。

假设一个Window解决方案中,有两个窗体Form1和Form2,Form1窗体中有一个DataGridView数据控件,如何在Form2中访问DataGridView中数据,即如何实现在这两个窗体之间通讯呢?

第一种方法

通过设置Form2窗体的构造函数,改为带参数的构造函数,传入一个对象,在设计模式中经常会传入类或对象,实现了对数据元素的封装,有些人通过传入一些具体参数,如字符串、控件等,无疑这种方式比较局限,扩展性很差,如果Form1中再增加新内容后,还需要改传递参数。

Private mF_Form As Form1

更改Form2的构造函数为有参数的

Public Sub New(ByVal form As Form1)
           MyBase.New()
           '该调用是 Windows 窗体设计器所必需的。
           InitializeComponent()
           Me.mF_Form = form
        
      End Sub

现在,就可以把Form1对象传入Form2中,这里对Form1的修改也是真正对Form1的修改,因此,也需要谨慎操作。

在Form1中用到Form2的地方还需要加上一句话:

Dim form1 As New Form2(Me)

  这是因为Form2的构造函数已经改变,实例化Form2时不再调用默认构造函数,需要我们指明参数,然后,实例化。
      这里的Me指的就是Form1当前的实例,也就是把当前Form1的实例通过Form2的构造函数传递给Form2类,否则出现   “错误对非共享成员的引用要求对象引用”

第二种方法

如果我们在Form2中,这样声明:Dim form1 As new Form1

我们知道此时form1是一个新的form1实例,不是我们要用的那个,我们只需让这个实例变成我们要用的那个即可。

form1.Owner=Me

这样就可以正常通讯了。

有很多时候为了安全,我们还需要改一个声明级别,因为这样可以对原创题进行更改,很不安全。

在C#等语言中,方法类型……

转载于:https://www.cnblogs.com/lilongsheng/archive/2012/05/27/3226110.html

如何在窗体之间通讯的几种方法 ? VB.NET方案相关推荐

  1. android fragment传递参数_fragment之间传值的两种方法

    在Activity中加载Fragment的时候.有时候要使用多个Fragment切换.并传值到另外一个Fragment.也就是说两个Fragment之间进行参数的传递.查了很多资料.找到两种方法.一种 ...

  2. Vue组件之间传值的几种方法 (直接上代码)

    vue组件之间传值的几种方法总结 一. props(父传子) 父组件 传递 <template><div><HelloWorld :msg="msg" ...

  3. 基于Linux的USB 主/从设备之间通讯的三种方式

    转载:http://archive.eet-china.com/www.eet-china.com/ART_8800323770_617693_TA_eda530e7.HTM 随着简单易用的USB接口 ...

  4. linux配置usb主从_基于Linux的USB 主/从设备之间通讯的三种方式

    转载:http://archive.eet-china.com/www.eet-china.com/ART_8800323770_617693_TA_eda530e7.HTM 随着简单易用的USB接口 ...

  5. WinForm 窗体圆角、平角(不规则窗体)实现的几种方法

    以下代码均是写在partial class Form1 : Form{}代码块之间,废话不多说直接上代码. 第一种方法是通过OnResize方法来实现 第一种方法 public void SetWin ...

  6. 线程之间传递信息的几种方法 Android

    一.需求分析 在使用okhttp的时候,有时会遇到需要在onresponse中将数据传送到其他线程中,或者是发送消息给UI线程,通知其更改UI的情况,并且我想返回的数据不是普通数据,而是一个类的对象. ...

  7. iframe和父窗体之间的互相监听方法

    例如:一个父窗体点击了个提交表单事件,同时要将提交的服务器返回处理结果显示在父窗体的iframe页面中,父窗体通过获得iframe中返回的结果来处理父窗体的部分数据.此时就要监听iframe的内容变更 ...

  8. Vue中父子组件之间传值 ,兄弟组件之间传值(两种方法)

    一.父向子传值props 父组件向子组件传值: parent:<parent><child :message="msg"></child> // ...

  9. 实现多个标签页之间通信的几种方法

    示例地址 prologue 之前在网上看到一个面试题:如何实现浏览器中多个标签页之间的通信.我目前想到的方法有三种:使用websocket协议.通过localstorage.以及使用html5浏览器的 ...

最新文章

  1. 语言模型也不能乱说话!DeepMind发布GopherCite:讲话必须带证据
  2. c js html页面进度条,js实现进度条的方法
  3. 做App还是微信公众号,你该如何抉择?
  4. 邮件服务器轻松组建 友旺MG1200功能介绍
  5. 【大脑】改善记忆力的食物有哪些
  6. 绿盟数据库审计系统hive_数据库审计系统
  7. 在JBoss Fuse / Fabric8 / Karaf中使用Byteman
  8. [Golang]slice值传递存在的问题
  9. 【vue2.0进阶】用axios来实现数据请求,简单易用
  10. 北大出版社继续送书 | 附上周4位中奖的朋友信息
  11. 【ASP.NET】HTTP中的 get 和 post 请求
  12. Mysql优化(出自官方文档) - 第十篇(优化InnoDB表篇)
  13. ubuntu 定时执行重启(crontab)
  14. 基于Java生鲜蔬菜食品商城系统详细设计和实现
  15. 机器学习——K均值算法(K-means)
  16. linux git版本更新
  17. git进阶 | 03 -如何彻底删除git中的大文件
  18. 消息队列-简单介绍Java消息队列,什么是消息队列,作用以及常见消息队列
  19. 自定义springboot-starter,感受框架的魅力和原理
  20. 遍历某个文件夹中所有文件夹名和文件名

热门文章

  1. 【转】gdb 调试段错误
  2. CodeForces 689B Mike and Shortcuts (bfs or 最短路)
  3. SQL SERVER 如果判断text类型数据不为空
  4. 《Android开发从零开始》——29.Content Providers(1)
  5. 谁还期待iPhone 13?
  6. 产品规划,要考虑哪些方面?
  7. PMCAFF微课堂 | 前猎豹高级产品经理:8大案例讲解猎豹如何做产品
  8. 中国旅游日出游火爆 中国第一水乡游人突破5万
  9. rhel7搭建可用实验环境
  10. Linux 服务器如何修改主机名