窗体hide后,如何令其可见,如何实现show出来后,执行一个操作?
------------------------------
一个窗体unload后,如果再show,必须会执行load事件,所以我可以在load事件中写代码,
但是如果一个窗体 hide 后,再次 show 出来时,它不再执行 load 事件了,
我想实现,窗体每 show 一次,都会执行相应的代码,在哪种事件中写代码呢?

解决方案 »

  1.   

    我的目的是,窗体每次从不可见到可见,就执行相应的一段代码更新窗体中表格的内容。
    主要是想实现窗体上表格内容的实时更新,一个窗体hide后,再show出来,窗体显示的还是hide前的表格内容信息,我想每 show 一次,执行更新表格内容的代码。
      

  2.   

    这个更不不需要使用什么hide属性
    你在窗体中添加一个定时器控件(Timer)编写定时器事件,让其定时刷新窗体界面数据即可。
      

  3.   


    Private Sub Form_Load()
        Timer1.Enabled = True
        Timer1.Interval = 1000
        Label1.Caption = "0"
    End SubPrivate Sub Timer1_Timer()
        Label1.Caption = (Val(Label1.Caption) + 1) Mod 100
    End Sub
      

  4.   

    简单的方法:
    1、在工程中插入一个用户控件,然后控件中导出Show事件,然后把控件放到窗口上,
       再通过那个用户控件导出的Show事件处理过程。
    2、在窗口的Paint事件中处理,通过一个公共变量识别是否需要处理
       如:
    Dim IsShow As Long
    ...
       me.Hide
       IsShow = 0
    ...Private Sub Form_Paint()
       if IsShow=0 Then
          IsShow = 1
          '你的处理过程
       End If
    End Sub复杂点的方法:
        用钩子过程来接收 WM_SHOWWINDOW 消息,当收到改消息的时候处理你的过程
      

  5.   

    想用过用这个事件,但是发现不好。
    怪了,每次用这个事件,都感到莫名的问题,所以不用了。 怪的是,在这个事件中写代码,功能是从服务器取数据填充表格,窗体显示有极明显延迟,但是同样的代码,在load事件中执行就没问题,所以比较怪,找不到原因。
      

  6.   

    窗体的Activate事件在窗体激活时发生,如果是没有加载的窗体,那么它在Load事件之后执行。对于已经加载的窗体,show方法不会再执行Load事件。所以你激活一个hide的窗体,只能将代码写在Activate事件中...至于“怪的是,在这个事件中写代码,功能是从服务器取数据填充表格,窗体显示有极明显延迟,但是同样的代码,在load事件中执行就没问题,所以比较怪,找不到原因。"...同样的代码执行时间基本是一致的,只是在Load事件执行时,窗体是不可见的,一直到代码执行完成(控件数据填充完成后),窗体和控件才同步显示出来,所以你觉得是没有延时的....而在Activate事件中,是在窗体显示出来后,再执行数据的查询和控件填充,所以你才觉得有延时...解决方法就是不要作大量的数据查询,改变控件数据填充方式(估计这个耗时会比较多)...
      

  7.   

    lz有没有考虑在form中增加一个timer实时判断自己的visible属性是否为true呢Sub Timer1_timer()
    Static HS As Boolean
        If Me.Visible Then
            If HS = False Then
                HS = True
                MsgBox "me show"
                'Form_Load
            End If
        Else
            If HS Then
                HS = False
                MsgBox "me hide"
            End If
        End If
    End Sub定时器你定个100毫秒,估计够用了,这个绝不会增加很多额外负担
      

  8.   


    Sub Timer1_timer()
    Static HS As Boolean
        If Me.Visible Then
            If HS = False Then
                HS = True
                MsgBox "me show"
                'Form_Load
            End If
        Else
            If HS Then
                HS = False
                MsgBox "me hide"
            End If
        End If
    End Sub