窗体hide后,如何令其可见,如何实现show出来后,执行一个操作?

xuexi_net1 2010-10-13 02:47:47
窗体hide后,如何令其可见,如何实现show出来后,执行一个操作?
------------------------------
一个窗体unload后,如果再show,必须会执行load事件,所以我可以在load事件中写代码,
但是如果一个窗体 hide 后,再次 show 出来时,它不再执行 load 事件了,
我想实现,窗体每 show 一次,都会执行相应的代码,在哪种事件中写代码呢?
...全文
255 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
dingyanwei 2010-10-14
  • 打赏
  • 举报
回复

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
dingyanwei 2010-10-14
  • 打赏
  • 举报
回复
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毫秒,估计够用了,这个绝不会增加很多额外负担
vbman2003 2010-10-13
  • 打赏
  • 举报
回复
窗体的Activate事件在窗体激活时发生,如果是没有加载的窗体,那么它在Load事件之后执行。对于已经加载的窗体,show方法不会再执行Load事件。所以你激活一个hide的窗体,只能将代码写在Activate事件中...

至于“怪的是,在这个事件中写代码,功能是从服务器取数据填充表格,窗体显示有极明显延迟,但是同样的代码,在load事件中执行就没问题,所以比较怪,找不到原因。"...同样的代码执行时间基本是一致的,只是在Load事件执行时,窗体是不可见的,一直到代码执行完成(控件数据填充完成后),窗体和控件才同步显示出来,所以你觉得是没有延时的....而在Activate事件中,是在窗体显示出来后,再执行数据的查询和控件填充,所以你才觉得有延时...解决方法就是不要作大量的数据查询,改变控件数据填充方式(估计这个耗时会比较多)...
xuexi_net1 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 cuizm 的回复:]

执行Activate事件
[/Quote]
想用过用这个事件,但是发现不好。
怪了,每次用这个事件,都感到莫名的问题,所以不用了。

怪的是,在这个事件中写代码,功能是从服务器取数据填充表格,窗体显示有极明显延迟,但是同样的代码,在load事件中执行就没问题,所以比较怪,找不到原因。
射天狼 2010-10-13
  • 打赏
  • 举报
回复
执行Activate事件
贝隆 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xuexi_net1 的回复:]
引用 3 楼 veron_04 的回复:

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


加定时器,不好的。
我的表格中的数据,是从服务器取的。这样会加大服务器的负担呀
[/Quote]
你试验过吗?按道理你只要设置好时间间隔,对服务器的压力不会增加多少
现在还是人类 2010-10-13
  • 打赏
  • 举报
回复
简单的方法:
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 消息,当收到改消息的时候处理你的过程
xuexi_net1 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 veron_04 的回复:]

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

加定时器,不好的。
我的表格中的数据,是从服务器取的。这样会加大服务器的负担呀
贝隆 2010-10-13
  • 打赏
  • 举报
回复

Private Sub Form_Load()
Timer1.Enabled = True
Timer1.Interval = 1000
Label1.Caption = "0"
End Sub

Private Sub Timer1_Timer()
Label1.Caption = (Val(Label1.Caption) + 1) Mod 100
End Sub

贝隆 2010-10-13
  • 打赏
  • 举报
回复
这个更不不需要使用什么hide属性
你在窗体中添加一个定时器控件(Timer)编写定时器事件,让其定时刷新窗体界面数据即可。
xuexi_net1 2010-10-13
  • 打赏
  • 举报
回复
我的目的是,窗体每次从不可见到可见,就执行相应的一段代码更新窗体中表格的内容。
主要是想实现窗体上表格内容的实时更新,一个窗体hide后,再show出来,窗体显示的还是hide前的表格内容信息,我想每 show 一次,执行更新表格内容的代码。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧