【学生信息管理系统】--优化篇

终于大功告成了,真是一把辛酸,一把泪啊,别提我有多高兴了,刚开始接触学生信息管理系统,只觉得窗体好多,代码好多,在敲代码的时候也没考虑别的,只是单纯的往上抄,之后发现有好多窗体上的代码都大同小异,代码敲完就是让整个程序跑起来,这个过程还算是好的,到后面的优化过程可真是有苦说不出来啊,下面是几个优化时出现的几个大问题!
在父窗体上添加图片
为了美观,我在父窗体上添加了一个图片,就是因为这个图片,问题来了。在打开子窗体时,图片会把子窗体覆盖掉,导致子窗体无法显示。这时不要慌,只需两行代码。
在模块中声明这个函数SetParent

SetParent函数:应用程序可以使用SetParent函数来设置弹出式窗口,层叠窗口或子窗口的父窗口

Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

在父窗体中写入这行代码

SetParent frmAddcourseinfo.hWnd, fmainform.hWnd
这样子窗体就会显示出来了,赶快去试试吧!

在父窗体中打开第二个子窗体第一个子窗体就不可以被使用了

在验项目的时候发现在父窗体中打开第二个子窗体之后第一个就不能用了,字符输不上去了,之后就想了一个办法,窗体添加或者查询完就直接关闭,弊端就是每添加一次就要重新打开一下窗体,我感觉没有哪个APP会是这样的。然后结合百度,想出来了一个新办法。

添加一行代码:Unload ActiveForm

ActiveForm表示活动窗体,卸载活动窗体。在打开你要打开的子窗体同时卸载其他活动窗体。
这时不要高兴的太早,我们刚运行程序是没有活动窗体的,一点就会报错。恕小生愚昧,想出来一个很LOW的办法,在显示父窗体的同时,加载一个子窗体Form1,然后让Form1隐藏,本以为这样就可以解决问题了,但是祸不单行,当用户点右上角的X关闭怎么办,这样就没有活动窗体了,在打开子窗体又会报错,还好我机智,限制用时使用X关闭,下面是限制代码

先申明

Private Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Long, ByVal bRevert As Long) As Long
Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Private Const MF_REMOVE = &H1000&
Private Const SC_COLSE = &HF060

然后再Form的Load事件里写一句代码就可以了!

RemoveMenu GetSystemMenu(Me.hWnd, 0), SC_COLSE, MF_REMOVE

总结
优化是一个细心又艰难的过程,除掉自己程序中所有的BUG,每清除一个BUG的时候都给我无比的欢乐,也是一反馈一种动力,我们要享受这样过程。如有更好的方法还请及时斧正我!!

猜你喜欢

转载自blog.csdn.net/ywq1016243402/article/details/80141912