机房收费系统——子窗体最小化

在开发机房收费系统时,遇到子窗体管理和关闭的挑战。当打开新子窗体时,旧子窗体会自动最小化,但过程中遇到控件无法调出窗体及子窗体最小化后消失的问题。解决方案涉及使用SetParent函数调整窗体层级,并通过修改窗体属性防止最小化后消失。此问题的解决经验对于同类问题有参考价值。
摘要由CSDN通过智能技术生成

      机房收费系统已经进行了一段时间了,因为这是第一次脱离源代码,很多东西都是靠自己去琢磨。所以,这次遇到的问题是各式各样的。其中一个问题就是涉及到子窗体之间 的关闭问题,如何实现打开一个子窗体,而先前打开的子窗体自动最小化呢?

      这个问题可是让自己纠结了老长时间啊。在实现的过程中遇到了很多问题:

       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

          只不过这里唯一麻烦的就是需要在每一个窗体的下面写这么一行代码。其实我是一开始想要在模块中写的,只不过没有实现(如果你实现了,请赐教哦)

   

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值