现在的位置: 首页 > 综合 > 正文

机房收费系统之窗体遍历

2017年08月05日 ⁄ 综合 ⁄ 共 1443字 ⁄ 字号 评论关闭

机房收费系统中有一个很高大上的功能,那就是窗体遍历——当一个MDI子窗体打开时,其他的子窗体自动最小化到底部,这样可以防止因加载窗体过多而造成不便。

开始我在每个子窗体的form Activate 事件下面加了如下的代码

<<span style="font-size:24px;">span style="font-size:24px;">1</span>.<span style="font-size:24px;">	For Each a In Forms  
2.	   If a.Name <> Form1.Name And a.Name <> frmMain.Name And a.Name <> Me.Name Then  
3.	       a.WindowState = 1  
4.	       Form1.ZOrder 1
5.	       End If  
6.	Next  </span>
</span>

代码中的form1代表子窗体,frmMain 为父窗体。

但是出现了一个恐怖的现象,就是父窗体上的控件浮现在子窗体上,看着就不舒服,老觉得vb有一种要疯的赶脚……

然后我就开始一句一句的看这段代码,把form1.Zorder  1 这一句代码改成form1.Zorder0 就OK了,所以就在这给大家分享一下相关的知识:

简单的说两个同级的控件,摆在同一个地方, zorder(0) 可将一控件在前面显示遮住另一个控件,zorder(1)则可将此控件放在后面, 让原来被遮住的另一个控件在前面显示。所以之前是因为我们将form1的zorder设为1,那么就会让form1 的窗体在前面,但是frmMain 的控件却在前面,所以出现了那个恐怖的情景……

下面是官方的解释:

ZOrder 用在不同的地方,有二种不同的意义: 
1、用于 MDIForm 中的 Child Form 时,指的是每一个 Child Form 的上下位置关系。 
2、用于每一个 Form 中的所有控制项时,指的是每一个控制项间的上下位置关系。 

注一:一般我们的二度平面座标轴是指 X 座标轴 (东西向)及 Y 座标轴 (南北向), 
   二个轴构成一个平面,再加上垂直的 Z 座标轴,就构成了三度立体空间了! 
   所以 ZOrder 指的就是物件在垂直的 Z 座标轴上的上下位置关系。 

注二:虽然 ZOrder 指的是物件在垂直的 Z 座标轴上的上下位置关系。 
   但是很多人搞不清楚,为什么他已经设定了 ZOrder 了,为什么在某些控制项中是无效的? 

   原因是对单一 Form 或 单一 Container 而言,在垂直的 Z 座标轴上又分成三个层次:
   最下一层:显示图形方法结果的绘图空间。 
   中间一层:用来显示图形物件(例如 Image) 和 Label 控制项。 
   上面一层:显示所有非图形控制项,例如 CommandButton、CheckBox 或 ListBox。 
   而 ZOrder 只对单一层次内的控制项有效而已! 

   例如:您如果设定 Label 及 Image 的 ZOrder 是有效的,因为它们都在中间一层! 
      您如果设定 Label 及 CommandButton 的 ZOrder 是无效的,因为它们在不同层! 

   最重要的是:不管 ZOrder 如何设定, 
         在上面一层的物件永远会在中间一层的物件的上方! 
         在中间一层的物件永远会在最下一层的物件的上方!

 

 

总结:我们就是不断的发现问题,不断的解决问题,不断的积累经验,不断的为人民服务!


 


抱歉!评论已关闭.