机房收费和谐的子窗体

问题引入:

      机房收费系统中在主窗体添加picture可以比较方便的将我们需要的控件添加到窗体上,但是这也导致了一下问题,因为是”相同的一个级别“,所以耍大牌的picture将其他的子窗体完完全全的挡在了后面

遇到问题、解决问题

一、比较受欢迎的方法是

1、引用API函数

Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

2、在要打开窗体的代码处添加

比如要打开frmabout

<span style="font-size:18px;">frmabout.Show
SetParent frmabout.hWnd, frmmain.Picture1.hWnd</span>

3、在打开窗体的activate中

Dim a As Form  
For Each a In Forms  
   If  a.Name <> MDIForm1.Name And a.Name <> Me.Name Then  
       a.WindowState = 1  
       End If  
       Next

  或者在deactivate中

 If Me.WindowState <> 1 Then  
        Me.WindowState = 1  
    End If 

vbNormal 0正常 VbMinimized 1 最小化VbMaximized 2 最大化

另一种:窗体自动最小化

Private Declare Function GetForegroundWindow Lib "User32" () As Long  
Private Sub Form1_Load()
      Timer1.Interval = 100  
End Sub
Private Sub Timer1_Timer()
Dim frmCurr As Form
      If GetForegroundWindow <> Me.hWnd Then  '判断获取的句柄与本窗体的句柄是否一致
            frmCurr.WindowState = 1  '如果不一致就最小化
      End If
End Sub

二、

 1  加载一个主窗体MDIfrom,但是只要它的外壳,另外建一个普通窗体如from1,将该窗体内嵌主窗体中

 2主窗体show的时候该from1跟着show

 3、其大小跟父窗体的大小相同

 4、from1窗体的boderstyle属性设置为 0-None

 5、利用父窗体的Resize事件(简单举例) :当一个对象第一次显示或当一个对象的窗口状态改变时该事件发生

  代码: 

Private SubForm_Load()
Text1.Text =""
End Sub

<span style="font-size:18px;">Private SubForm_resize()
  Text1.Move 0, 0, ScaleWidth, ScaleHeight
End Sub</span>

本来面目:

机房收费和谐的子窗体_第1张图片






效果:

机房收费和谐的子窗体_第2张图片









  以上可以实现这两个窗体完美结合了,这带来好处也有坏处,如果一不小心点到from1,那么其他正在用的窗体就会被隐藏在from1后,而from1是铺满整个父窗体的,也就是说被隐藏的窗体是不太可能被找到的,因此我们引进了zorder方法  (另一个) 

Form1.ZOrder 1

呵呵呵呵呵呵呵

收费中为了让from1位于最底层,需要在每一个可能成为活动窗体的activate事件中添加

form1.zorder  1

                                                                 如果有错误,欢迎交流



你可能感兴趣的:(机房收费和谐的子窗体)