问题:窗体在运行时显示,在解决方案管理器中不显示

简介: 小引: 虽然我知道实现《机房收费管理系统》会遇见各种问题,但是碰到这么狗血的问题,我真是大姑娘上花轿——头一回!

小引:

   虽然我知道实现《机房收费管理系统》会遇见各种问题,但是碰到这么狗血的问题,我真是大姑娘上花轿——头一回!


果:

某天,具体时间忘了,只记得上了节课回来,就发现我刚做好的《机房收费系统》的frmMain窗体在解决方案资源管理器中找不到了,但是运行的时候却能正常的显示出来,当下我就郁闷了。本来一天的专业课,好不容易挤出时间,把界面显示做出来了,菜单栏也用英文名命名了,现在可好,啥也看不见了,难道要重来吗!呜呜呜。。。


因:

  因为我的洁癖,见不得“没用的”代码,将窗体中的一句话删了,直接造成了上面的结果,真是后患无穷啊!我到底是删了什么东西,这么神奇?


答案:


Public Class frmMain
End Class 


回想我的解决方法是:

第一,确定是因为自己的哪步修改引起的?


 记忆中,我是在修改了frmMain窗体的IsMdiContainer属性为true后,保存了就去上课了。下课回来再打开程序时就看不见了,所以,我又新建了一个窗体,将它的IsMdiContainer属性设置为true,我想,一山不容二虎,肯定会报错吧,结果发现自己对VS还是不够理解,在同一个解决方案中可以同时存在两个父窗体。所以,没报错。。。此时我已半疯,心里滴血~半天的功夫可能要没了,要重新做了。。。不行,再试试——


第二,对比窗体内部代码,观察我的窗体和新生成的有什么不一样!

   当然,从外观上看,我的frmMain窗体现在只剩下一个光杆类库了,如图:


20160317210827581.png


打开新建的窗体,发现在frm类中有这样一句话:

Public Class frm
End Class


而我的类frmMain中没有,难道真的是因为这句话?算啦,死虎当活虎医,抱着试试看的态度,我把代码一改: 用到我的frmMain大老虎上,不到5秒的时间,药到病除,活力重现,frmMain老虎和其他的老虎一样一样的啦。

Public Class frmMain
End Class 

20160317211025764.png


为什么我的“洁癖”会造成我的大老虎生病呢?

选中

Public Class frmMain
End Class 




按F1查找帮助,找到了最醒目的一段话:



20160317211156797.png


仔细一想,以前老师介绍过:我们使用的窗体其实就是封装好的类,我们使用的VS工具和VB工具在窗体上就是应用了面向对象的思想,直接将窗体为我们封装好,不用我们再用代码画一个个的“画”控件,在以前,要想做出程序,要先用代码“画”出窗体,才能真正开始写和程序运行有关的代码;

  但是,我将类frmMain.vb直接删掉,在显示上,窗体frmMain 就直接不存在了,只剩下一个类库,但是在我的在运行时却可以显示出来,而且能进行操作,在程序文件组成的UI部分,还能看见frmMain.De20160317211752836.pngsigner.vb,如图:


到底是谁控制窗体在运行时显示,又是谁让窗体在解决资源管理器中不显示了呢?

经过查资料终于知道了:


  FrmMain.vb 是指类代码。FrmMain.Designer.vb 是指界面设计代码。在 VB 2003 和之前的.net版本中这两部分是在一起的,从 VB 2005 以后才分开。也就是说,在之前的IDE里面,IDE将Designer.vb里面的代码全部放在窗体代码文件开头。


  简单的来说 .Designer.vb 保存的是用户界面设计自动生成的代码,里面写着的是比如 Form 的高度宽度啊、窗体上有个 TextBox 的 Text 啊之类这些东西,这些东西用户在 IDE 中只需要用鼠标去画并修改相应的控件属性就可以了,VS 会自动生成相应的代码保存到 Designer.vb 中。



在FrmMain.Designer.vb中,我们可以看见这样的描述:


20160317211925991.png


相关解释:


partial 信息只对编译器有用,编译器在编译时看到对某个类的描述是“碎”的(partial 的),它会去其他地方收集该类的其他碎片,然后把所有的该类的碎片组合成完整的一个类,再对其编译。-- @jizhongbo 简单地说就是我们可以把类写在不同的文件中,类名相同,用partial修饰后,IDE会找全类的碎片,然后粘在一块儿,形成完整的一个类。


我的理解:

 我们的frmMain.vb和frmMain.Designer.vb就是将一个类放在了不同的文件中,我将frmMain.vb删除后,“窗体类”在重组时不完整,便在右边的解决方案资源管理器中不显示了。但是因为一个“窗体类”负责显示的部分在FrmMain.Designer.vb,我删除的是frmMain.vb,所以没有影响窗体在运行时显示。


小结:


 尽管查资料和整理博客用的时间可以让我再重新建一个MDI窗体了,但是如果没有查资料的过程,就不会有现在的知识上的收获,有的更多的是对VS的胆怯和对自己当时的“傻”的懊悔。




了解更多frm.Designer.vb 的知识,向大家推荐:http://tieba.baidu.com/p/1822178540#













相关文章
|
存储 安全 Linux
Docker 离线安装与基本使用
Docker 离线安装与基本使用
3285 0
Docker 离线安装与基本使用
|
Java 测试技术 Windows
Jmeter 压测 ws(s)
  上一篇Jmeter压测http(s)介绍了如何使用Jmeter压测常规的web服务接口。本文将继续演示如何使用Jmeter对ws(s)进行压力测试。   有过Socket相关开发经验的人应该都不会陌生,ws协议就是WebSocket协议,而wss对应就是在SSL上运行的WebSocket协议。
2558 0
|
Unix 应用服务中间件 Linux
1-Nginx介绍及安装(源码安装)
1-Nginx介绍及安装(源码安装)
266 4
|
数据可视化 JavaScript API
NGLView 安装与配置-交互式分子结构和轨迹查看
NGLView 安装与配置-交互式分子结构和轨迹查看
860 0
NGLView 安装与配置-交互式分子结构和轨迹查看
|
SQL 数据采集 关系型数据库
sqlyog下载和卸载的最新详细过程,超多图快速安装或者卸载
sqlyog下载和卸载的最新详细过程,超多图快速安装或者卸载
3244 0
|
数据管理 数据库
了解使用IndexedDB的事务管理和数据版本管理
IndexedDB的事务管理确保数据一致性和完整性,通过原子操作单元保证多操作要么全部成功,要么回滚。使用transaction()方法创建事务,指定读写模式和存储空间,异步操作读取、写入或删除数据。提交或中止事务决定更改是否应用于数据库。 数据版本管理处理数据库结构更新、迁移和兼容性,通过版本号管理数据库变化。打开数据库时指定版本,低版本触发升级,执行数据结构更改和兼容性处理。有效版本管理使应用程序在结构变更时平滑迁移,保持与旧数据兼容性。 事务和版本管理是IndexedDB的关键,有助于高效、安全地处理数据并支持数据库的灵活扩展。
|
机器学习/深度学习 存储 数据挖掘
基于YOLOv8深度学习的智能玉米害虫检测识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战
基于YOLOv8深度学习的智能玉米害虫检测识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战
|
设计模式 安全 Java
阿里开发手册 嵩山版-编程规约 (一)命名规范
该文章主要介绍了阿里开发手册嵩山版中关于编程规约的命名规范,包括代码命名的强制和推荐规定,以及接口、类、枚举等的命名规则和各层命名规约等内容。
 阿里开发手册 嵩山版-编程规约 (一)命名规范
|
运维 Kubernetes Cloud Native
主流定时任务解决方案全横评
本文将就当前主流定时任务解决方案进行介绍和分析,期望可以在企业技术选型和项目架构重构时作为参考。
11542 99
主流定时任务解决方案全横评
|
Shell Android开发
Magisk模块:优化安卓碎片化2.0(循环版)fstrim-模块调用magisk自带的busybox.sh(重启生效)
Magisk模块:优化安卓碎片化2.0(循环版)fstrim-模块调用magisk自带的busybox.sh(重启生效)
1435 1
Magisk模块:优化安卓碎片化2.0(循环版)fstrim-模块调用magisk自带的busybox.sh(重启生效)
下一篇
开通oss服务