博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何在窗体之间通讯的几种方法 ? VB.NET方案
阅读量:6881 次
发布时间:2019-06-27

本文共 983 字,大约阅读时间需要 3 分钟。

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

      假设一个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/lilongsheng1125/archive/2012/05/27/4978651.html

你可能感兴趣的文章
ssh/ssh2登录
查看>>
mongodb对数组元素及内嵌文档进行增删改查操作(转)
查看>>
【python3.5】安装lxml中没有etree模块的问题解决方法
查看>>
pgpool-II的性能缺陷
查看>>
spin_lock浅析【转】
查看>>
MVC前台Post/Get异步获得数据时参数的取值问题
查看>>
8086/8088指令详解
查看>>
iOS:自定义代码块{ }
查看>>
C# 远程链接指定计算机,获取该计算机的计算机名等信息
查看>>
[Flume][Kafka]Flume 与 Kakfa结合例子(Kakfa 作为flume 的sink 输出到 Kafka topic)
查看>>
OpenGL入门笔记(十一)
查看>>
kill命令
查看>>
python3爬虫(二)实战- 爬糗事百科
查看>>
windowsXP用户被禁用导致不能网站登录
查看>>
第 8 章 TokyoCabinet/Tyrant
查看>>
智慧城市逐步推进 未来城市建设突破口分析
查看>>
是谁在推动路由器智能连接功能的普及?
查看>>
物联网软件更新政策不明 智能冰箱也易沦为犯罪工具
查看>>
基于 SaaS 解决库存问题, Nextail 获 160 万美元融资
查看>>
中昌海运拟更名“中昌大数据股份有限公司”
查看>>