机房收费和谐的子窗体

来源:互联网 发布:免费域名解析网站软件 编辑:程序博客网 时间:2024/05/18 12:04

问题引入:

      机房收费系统中在主窗体添加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.ShowSetParent 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 SubPrivate Sub Timer1_Timer()Dim frmCurr As Form      If GetForegroundWindow <> Me.hWnd Then  '判断获取的句柄与本窗体的句柄是否一致            frmCurr.WindowState = 1  '如果不一致就最小化      End IfEnd 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, ScaleHeightEnd Sub</span>

本来面目:







效果:










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

Form1.ZOrder 1

呵呵呵呵呵呵呵

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

form1.zorder  1

                                                                 如果有错误,欢迎交流



0 0