创建两个窗体 ,每个窗体上各有一个按钮,点击时隐藏其所在的那个窗体,切换出另一个窗体 来

其实只需要两句写在按钮的单击响应中的语句就行了:

两个窗体:Form1与Form2。

Form1上的按钮为: Button1,Form2上的按钮为: Button2

于是,我毫不犹豫地在VS.NET中内开始我的第一个VB.NET的项 目了。首先,新建了一个VB.NET的Windows应用程序项目,自动生成了一个 Windows Form:Form1,在其上加入一个按钮控件:Button1;然后,添加了一个 Windows Form:Form2,在其上加入了一个按钮控件:Button2。

在设计窗口 双击Button1后,编译器会切换到代码窗口的Button1的单击响应代码中。

在代码段中故计重施,当我想写Form2.Show时,在Form2之后打个点,出现的智能 感知菜单中,却没有Show这一方法。真奇怪,这怎么可能?难道VB.NET改动有这 么大

看了下Form1中的代码的开头处:

Public Class Form1Inherits System.Windows.Forms.Form

立刻就明白了,现在的Form1是一个从System.Windows.Forms.Form继承下来的类了,调用的时候当然需要先实例化了,

Public Class Form1Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.ClickMe.Hide()Dim Frm2 As New Form2Form2.Show()End SubEnd Class

Public Class Form2Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.ClickMe.Hide()Dim Frm1 As New Form1Frm1.Show()End Sub
End Class

在 Form2 的 Button2 的单击事件中也相似地写了一段代码,运行 一下,和VB6的效果差不多了。

但是问题也随之而来...

我们在 Form1 中添加一个文本框 textbox1,清空其中的文字。然后运行了一下程序。在运行中,他在 文本框里写了几个字:“Hello World”,然后点击 Button1 切换到 Form2,接着点击Button2,重新出现的Form1的文本框中却变成了空白。

“这……”我一时语塞,慢慢地想起点什么, “应该是程序通过 New 构造方法,每次点击按钮都会重新实例化一次Form类吧?

所以每次重新出现的窗体都不是以前曾经出现过的那个。那以前的窗体也就失踪了,调不出来了。”

虽然我们每次点击实例化一个新的窗口,但先前旧的窗口还在内存中。你每实例化一次,系统就会开辟一块内存给一个对象,并会有相应的线程对其进行控制与管理。

如果作为进程中主线程的第一个 Form1 被 Hide 起来,没有关闭它,那么即使你关闭后来新创建的所有窗体,进程也不会被中止。那么,用什么方法去找回失踪的窗体呢,或者说怎么样就只使用一个对象,不再每次实例化呢?

没错,“全局对象!”只有利用全局变量,使 Form1 与 Form2 只实例化一次,这样就可以了。

请注意:这里不是在Form1 和 Form2 两个窗体中创建全局变量,因为这样会造成窗体启动时就对两个窗体就行相互的 NEW ,造成死循环。

所以我们只有创建一个模块文件:module1.vb,并且同时在:解决方案管理器-〉项目名.sln -〉右点鼠标 -〉属性 -〉通用属 性->常规->启动对象 -〉改为Module1。让程序启动后先运行 Module1 中的代码指令,然后编写代码如下:

Module Module1Public Frm1 As New Form1 '定义Form1的公用变量实例Public Frm2 As New Form2 '定义Form2的公用变量实例Sub main()'这句话表明程序启动了modele后,会接下来运行frm1,即form1的一个实例。主线程就成为运行期的frm1了。
        Application.Run(Frm1)End Sub
End Module

这样一来,frm1、frm2 就成为全局变量了,在Button1与 Button2的单击响应代码中只要写:frm1.show就可以了。

Public Class Form1Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.ClickMe.Hide()frm2.Show()End Sub
End Class

Public Class Form2Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.ClickMe.Hide()frm1.Show()End Sub
End Class

再运行程序,可以了,“Hello World”一直都会保持在 Form1 中的文本框里。

然而,当我们把 frm1 隐藏起来的时候,关闭了Form2窗口 (frm2实例),桌面上什么窗体都没有了,进程又一次被陷入在无法中止的情况。

那怎么解决关闭此窗口而不影响主窗口呢,请见本博客的另一篇文章“垃圾回收器 Dispose 和 Finalize 的互补作用”

转载于:https://www.cnblogs.com/lfls128/p/4943078.html

多窗体应用中的注意点相关推荐

  1. c#窗体程序生成错误_用C#语言做的窗体程序中出错恶劣怎么办?

    我使用的SQLserver2005中,建有数据库stuDB,内有表stuInfo, 此表中有一字段stuSex,数据内型是NCHAR(4),没其他约束,当然,性别只有"男"和&qu ...

  2. C#中主窗体Panel中加载其他多个窗体Panel控件

    今天在技术群里,笔者遇到一个这样的问题,"有客户想让两个Form窗体的内容放到一个Form窗体中,但是两个窗体的内容超出主窗体的大小",为了解决这个问题,笔者的想法是"采 ...

  3. C#:在一个窗体类中改变另一个窗体控件的属性

    例如:要在Form2窗体类中,改变Form1窗体中某控件的属性(内容.尺寸等). 本人所知道的至少有两种方式,第一种方法类似于设置从属关系,具体方式如下: 1.在Form1中添加一个要改变属性的控件, ...

  4. java窗体中添加图片_在java窗体程序中添加图片的方法

    在java窗体程序中添加图片的方法 发布时间:2020-06-16 11:24:13 来源:亿速云 阅读:148 作者:Leah 这篇文章主要为大家详细介绍了在java窗体程序中添加图片的方法,图文详 ...

  5. C#窗体设计中ToolTip的简单用法

    本文介绍C#窗体设计中ToolTip的简单用法. 操作流程 1.1. ToolTip信息提示框作用 C#中提供了信息提示框,这有很多用处,可以提示控件或者用户自定义的属性信息,而且可以自动弹出或者用户 ...

  6. C#窗体应用中使用ZedGraph曲线插件绘制图表

    场景 ZedGraph ZedGraph 是一个开源的.NET图表类库, 全部代码都是用C#开发的.它可以利用任意的数据集合创建2D的线性和柱形图表. 控件下载 https://download.cs ...

  7. C#中在窗体应用中使用StringBuilder拼接显示网页

    场景 CS中使用StringBuilder拼接html显示网页. 效果 实现 新建窗体应用 拖拽控件WebBrower用来显示网页. 拖拽之后,默认是停靠父容器,点击右上角,取消停靠父容器. 取消之后 ...

  8. Bootstrap datepicker 在弹出窗体modal中不工作

    解决办法 在 show 方法后面 添加 下面一段代码 $('#modalCard').modal('show');-例子 打开 弹出窗体 //$('#modalCard').modal('hide') ...

  9. java用循环语法在窗体中显示文字,如果子窗体在窗体视图中,则访问2003循环当前页面不起作用...

    我有一个包含多个子表单的表单 . 我想有以下行为:按主窗体的最后一个字段中的tab键或子窗体的最后一个字段中焦点移动到下一个子窗体或根据定义的Tab顺序返回到主窗体 . 为此,所有子表单和主表单都将C ...

最新文章

  1. 如何创建企业转型路线图
  2. linux运维入门第一周的学习部分命令!
  3. 转:WinForm程序中两份mdf文件问题的解决方法
  4. 双击背面截图_ios14怎么轻点双击背面截屏 敲击苹果手机背部截图设置教程
  5. 正确关闭线程池:shutdown 和 shutdownNow 的区别
  6. Modernizr 浏览器兼容功能检测
  7. HDOJ--1869--六度分离(用三种算法写的,希望能比较出来他们之间的区别)
  8. 银发经济崛起:什么才是“收割”老年人的正确姿势?
  9. VMWare + qnx系统开启ssh服务,并使用SecureCRT通过ssh远程连接qnx系统
  10. matlab 矩阵增加行,MATLAB 中 如何在矩阵中插入1行
  11. python interpreter下载_Piton - Python interpreter
  12. 计算机主板是cpu吗,主板和cpu是一起的吗
  13. 深度学习+符号表征=强大的多任务通用表征,DeepMind新论文可能开启AI新时代
  14. python技能书测评
  15. 大学计算机网络技术基础--笔记大全
  16. STM32F103RBT6 mcu芯片
  17. NAACL 2022 | 字节和加州大学提出ConST模型,探讨对比学习如何助力语音翻译?
  18. 口袋妖怪银java版,口袋妖怪银251版
  19. Kafka消费者群组消费不到消息解决办法
  20. 据起码科学常识推翻5千年“常识”:没最大自然数

热门文章

  1. UIActivityViewController: LaunchServices: invalidationHandler called
  2. eclipse 添加 server library
  3. Windows Phone 7 开发之:工具栏
  4. 让Sandcastle为你的类库生成类似于MSDN的帮助文档
  5. 宁波城市职业技术学院Linux,宁波城市职业技术学院拟聘用人员公示
  6. Vivado中IP核的xci, xcix, .dcp文件的区别
  7. 北理计算机考研机试,北理工计算机2000-2010考研机试题目c语言实现.doc
  8. 终端下载文件(windows和linux)
  9. linux grep find查找文件夹、代码中的某行/字符串
  10. 牛客华为机试第5题python