机房收费系统已经进行了一段时间了,因为这是第一次脱离源代码,很多东西都是靠自己去琢磨。所以,这次遇到的问题是各式各样的。其中一个问题就是涉及到子窗体之间 的关闭问题,如何实现打开一个子窗体,而先前打开的子窗体自动最小化呢?
这个问题可是让自己纠结了老长时间啊。在实现的过程中遇到了很多问题:
1、一个控件或菜单的单击事件调不出想要调出的窗体
在管理员菜单选项下有一项“删除和添加用户”,其中单击“添加”按钮会调出“添加用户"窗体,可是当自己敲好代码后无论怎样都调不出所要得到的窗体,代码检查了N遍仍然无果。不过,再经过一番思考后,发现其实这个问题与先前遇到的问题是一个道理。就是此时的子窗体之间都是同级关系,当前窗体把想要调出的窗体掩盖了。解决这个问题的方法就是上次介绍的一个setparent函数(详见
Private Sub cmdAdd_Click()
SetParent frm3Adduser.hwnd, MDIForm1.Picture1.hwnd
frm3Deladduser.WindowState = 1
frm3Adduser.Show
End Sub
这样此问题就可以解决了。
2、子窗体最小化后消失不见
打开一个子窗体后,点击最小化按钮,发现子窗体消失了,这是怎么回事呢?
其实这个还是窗体之间与picturebox的同级关系间的原因。我一开始在主窗体写调出各子窗体的代码是
Private Sub checksjjlMenu_click()
SetParent frm1Checksjjl.hwnd, MDIForm1.hwnd
frm1Checksjjl.Show
End Sub
这样导致子窗体最小化时消失不见,而且这种情况下还有可能发生错误提示,提示只能使用一个MDI窗体。这又该如何解决呢?
其实只要改一个位置就行了
Private Sub checksjjlMenu_click()
SetParent frm1Checksjjl.hwnd, Picture1.hwnd
frm1Checksjjl.Show
End Sub
3、打开一个子窗体,先前打开的窗体自动最小化
相信这个问题让很多人纠结着,我也是研究了很久才找到解决办法的。一开始我在网上找到了一串代码,不过效果与我想要的结果有一些出入,
dim frm as form
for each frm in forms
。。。
next
后来王梦梅让我帮她解决一个问题,正好跟我的问题一样,只不过效果是不一样的。从她那里我找到了方法,就是通过判断窗体的属性问题去解决
Private Sub form_activate()
Dim a As Form
For Each a In Forms
If a.Name <> Me.Name And a.Name <> MDIForm1.Name Then
a.WindowState = 1
End If
Next
End Sub
只不过这里唯一麻烦的就是需要在每一个窗体的下面写这么一行代码。其实我是一开始想要在模块中写的,只不过没有实现(如果你实现了,请赐教哦)