如何改变控件(包括自定义控件)在FORM上的叠放次序?假如两个控件有重叠,一个控件挡住了另外一个控件。想把上面的控件放到下面,从而让下面的控件显示出来,请问有什么办法?

解决方案 »

  1.   

    controlname.zorder  -1
      
    *****************************************************************************
    欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码) 
    http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
      

  2.   

    看到一段资料,好像用zorder每办法实现了,各位大虾有没有其他折衷办法?急
    设计阶段选取快显功能表中的「移至顶层」或「移至底层」功能表指令,可以设定物件的 z- 顺序。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 如何设定,
             在上面一层的物件永远会在中间一层的物件的上方!
             在中间一层的物件永远会在最下一层的物件的上方! 
      

  3.   

    首先我们来明确一个问题,针对你说的:“
      原因是对单一 Form 或 单一 Container 而言,在垂直的 Z 座标轴上又分成三个层次:
     最下一层:显示图形方法结果的绘图空间。
     中间一层:用来显示图形物件(例如 Image) 和 Label 控制项。
     上面一层:显示所有非图形控制项,例如 CommandButton、CheckBox 或 ListBox。”
    你试一下将窗体上放置一些控件,将窗体的ClipControls设置为False,然后写入下面的代码:
    Private Sub Command1_Click()
        Me.Line (0, 0)-(Me.ScaleWidth / 2, Me.ScaleHeight / 2), , BF
    End Sub
    你会看到,绘制的矩形遮挡了控件,所以这种次序是可以改变的。
    另外,象Label、Image这样的控件没有hwnd,是一种轻量控件,严格的讲它不属于Windows窗口的范围,因此它没有Hwnd,这种控件是永远不可能显示在有hwnd属性的控件之上的。
    yangao说的方法我想他是说你把这些Label这类控件放在Frame或PictureBox中,然后利用这些容器来达到实现Z顺序的目的吧。