请教:如何在窗体失去焦点时关闭窗体?

xiaojun2000 2001-07-09 01:57:22
我用了from_lostfacus()时unload me 不行,是不是有什么属性不对?高分给出!
...全文
264 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
chjh 2001-08-17
  • 打赏
  • 举报
回复
up
little_hero 2001-08-17
  • 打赏
  • 举报
回复
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private Sub Timer1_Timer()
If GetActiveWindow() <> hWnd Then End
End Sub
设置timer1时间间隔为几百毫秒,呵呵~~~,给分吧!

这样我试过,可以!
BlueMercury 2001-08-17
  • 打赏
  • 举报
回复
deactivate也不行(你试试单窗体的情况)。
要想实现这个功能,需要调用系统API了。因为切换焦点到操作系统上,已经超出你程序的控制范围了。
BlueMercury 2001-08-17
  • 打赏
  • 举报
回复
呵呵,用TIMER当然可以了,我设的interval为10,但这样会增大系统开销。
给出另一种方法:
Module:
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long

Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Public Const GWL_WNDPROC = (-4)
Public Const WM_ACTIVATE = &H6
Public preWinProc As Long

Public Function wndproc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

If Msg = WM_ACTIVATE Then
If wParam = 0 Then Unload Form1
End If
wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)
End Function


Form:
Private Sub Form_Load()
Dim ret As Long
preWinProc = GetWindowLong(Form1.hwnd, GWL_WNDPROC)
ret = SetWindowLong(Form1.hwnd, GWL_WNDPROC, AddressOf wndproc)
End Sub

Private Sub Form_Unload(Cancel As Integer)
Dim ret As Long
ret = SetWindowLong(Form1.hwnd, GWL_WNDPROC, preWinProc)
End Sub
ozw 2001-08-16
  • 打赏
  • 举报
回复
Private Sub Form_LostFocus()
Unload Me
End Sub
wintenko 2001-08-16
  • 打赏
  • 举报
回复
Unload事件
little_hero 2001-08-16
  • 打赏
  • 举报
回复
那还有什么用啊!?我一直就想要这个!!
这个该如何实现呢?
BlueMercury 2001-08-16
  • 打赏
  • 举报
回复
unload方法是可以的。但是只有在程序内部才可以,焦点切换到系统上就不会发生unload事件.
little_hero 2001-08-16
  • 打赏
  • 举报
回复
Private Sub Form_Deactivate()
Unload Form1
End Sub
真的不行啊!我切换窗口后根本就不会unload
zfcheng 2001-08-16
  • 打赏
  • 举报
回复
deactivate事件可以的啦我都是用这个来写我的关于窗体
你试一试,unload 窗体名
little_hero 2001-08-16
  • 打赏
  • 举报
回复
deactivate也不行,我试了!
ozw 2001-08-16
  • 打赏
  • 举报
回复
对不起,好像Form_LostFocus()真的不行,Deactivate是可以的,试过了

Private Sub Form_Deactivate()
Unload Me
End Sub
ozw 2001-08-16
  • 打赏
  • 举报
回复
如果想关闭窗体的同时退出程序,加上这个
Private Sub Form_Unload(Cancel As Integer)
End
End Sub
huanggx 2001-07-09
  • 打赏
  • 举报
回复
用deactivate事件
ipman 2001-07-09
  • 打赏
  • 举报
回复
我试了,好像都不行
hbm 2001-07-09
  • 打赏
  • 举报
回复
我试了一下,单窗体时没用,多窗体时有用.
Jackyin 2001-07-09
  • 打赏
  • 举报
回复
我就不信 用 end 还搞不定
hbm 2001-07-09
  • 打赏
  • 举报
回复
Unload 窗体名
不要用ME!

7,763

社区成员

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

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