表单上有很多Label,上面有大片的文字,怎么让用户点击表单上任何地方都可以关闭表单?
我在form的click事件里写了关闭的代码,可当用户击击有label的地方就关闭不了。请问有什么好的办法吗?大家在做这种“关于”表单时是怎么处理的?

解决方案 »

  1.   

    编写lable的click事件就行了,做成控件数组就只要编写一个就行了。^_^
      

  2.   

    在你窗体最上层放一个和窗体等大的Label,设置成透明,然后编写该label的click事件即可!大量的文章来这里看看:
    http://www.codesky.net
      

  3.   

    jazzyfree(DelphiFuns) 说的方法是最简单有效的。
      

  4.   

    呵呵,是呀!的确很好的解决了这个问题!
    但好的程序是不会遇到这种问题的,因为,这样窗体将也不再响应其它非Label控件(如TextBox等)的事件了。高级一点:所有文本通过Print或API输出到窗体,最为常用,资源占用最小也最方便实现你的需求。
    简单一点:用控件数组,可以统一写一个事件。既然,你现在很难再改设计,我也给你一个通用的补救办法,可满足大多数情况,即自动将Label转为Print输出(高级一点的方法^_^)Private Sub Form_Click()
        Unload Me
    End SubPrivate Sub Form_Load()
        Dim lbl As Label, fnt As StdFont, fc As Long
        AutoRedraw = True
        Set fnt = Me.Font
        fc = Me.ForeColor
        For Each lbl In Me.Controls
            With lbl
                If .Visible Then
                    .Visible = False
                    CurrentX = .Left
                    CurrentY = .Top
                    Set Font = .Font
                    ForeColor = .ForeColor
                    Print .Caption
                End If
            End With
        Next
        Set Font = fnt
        ForeColor = fc
    End Sub
      

  5.   

    但好的程序是不会遇到这种问题的,因为,这样窗体将也不再响应其它非Label控件(如TextBox等)的事件了。是傻瓜的说法!!!!!!我没见过Label(轻控件)能比TextBox(非轻控件)的次序更在前面!!!!!至少这个大Label在其他的Label的前面,而在其他任何轻控件的后面,就没有任何问题了.
      

  6.   

    两天没来,一登录就看到了自己犯下的历史错误。控件层次问题是被我说话时忽略了!因为当时并不是在谈它!但这样也好,同时我也发现了CSDN的新规定:说错话就是傻瓜!