关于复选框的选中与取消

sxj0384 2009-12-27 10:51:15
各位高手,我想用一个复选框来实现一个热键.让他选中时启用热键,取消时撤消热键.
代码如下:
Private Sub Check1_Click()

If (Check1.Value = Unchecked) Then
Check1.Value = Checked
HotKey vbKey2 '注册热键
Else

HotKey_Flg = True '停止热键等待
Call UnregisterHotKey(Me.hWnd, &HBCFF&)
Check1.Value = Unchecked
End If
End Sub

其中的HotKey vbkey2 为一过程,代码如下:
Private Sub HotKey(keycode As Integer)
Dim Message As Msg
Dim a As Boolean '为False隐藏窗体,True则显示
Dim t As Long
'注册 Ctrl+1 为热键
t = RegisterHotKey(Me.hWnd, &HBCFF&, MOD_CONTROL, keycode)
Me.Show
'等待处理消息
HotKey_Flg = False
a = True
Debug.Print "RegisterHotKey=" & t
Do While Not HotKey_Flg
'等待消息
WaitMessage
'检查是否热键被按下
If PeekMessage(Message, Me.hWnd, WM_HOTKEY, WM_HOTKEY, PM_REMOVE) Then

If a Then '如果窗体是可见状态那么
Me.WindowState = 1 '如果是你设置的快捷键且窗体当前可见 就隐藏窗体
traydelbal Form1
a = False
Else
Me.WindowState = 0
Form1.Show '如果是你设置的快捷键但窗体当前不可见 就显示窗体
TrayAddIcon Form1, Form1.Icon, "论坛挂机器By三颜木急风传~"
TrayBalloon Form1, "欢迎回来!刚才一直处于挂机中~" + vbCrLf + UseTime(), "论坛挂机程序", NIIF_INFO
a = True
End If
End If
'转让控制权,允许操作系统处理其他事件
DoEvents
Loop

End Sub

不过不知怎么回事,运行后点击复选框就出现
"实时错误'28'"
溢出堆栈空间
这是怎么回事啊?还有该怎么解决这个问题?
请高手指教,谢谢了~~
...全文
344 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cbm6666 2009-12-27
  • 打赏
  • 举报
回复
If (Check1.Value = Unchecked) Then
'Check1.Value = Checked
HotKey vbKey2 '注册热键
Else

HotKey_Flg = True '停止热键等待
Call UnregisterHotKey(Me.hWnd, &HBCFF&)
'Check1.Value = Unchecked
End If

你这地方在不停的运行 你知道吗 ?

还有 2F asftrhgjhkjlkttttttt 提醒你的是正确的 CheckBox原本的时计就是0与1

VB有很多的地方都可 "兼容", 但身为编程员 最好遵守 "游戏规则" 不是等着裁判让你过关.

sxj0384 2009-12-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 asftrhgjhkjlkttttttt 的回复:]
Check1.Value = Checked
Check1.Value = Unchecked
这2句是什么,值为1就是选中,0就是没选中
[/Quote]
checked 就是 1
unchecked 就是 0
孤独剑_LPZ 2009-12-27
  • 打赏
  • 举报
回复
Check1.Value = Checked
Check1.Value = Unchecked
这2句是什么,值为1就是选中,0就是没选中
slowgrace 2009-12-27
  • 打赏
  • 举报
回复
不妨在两个过程里都加上 On Error Goto 确定一下错误出现在哪一行
舉杯邀明月 2009-12-27
  • 打赏
  • 举报
回复
用法不对。

需要 HOOK 窗口消息。
用 RegisterHotKey 注册热键后,在消息循环中 处理 WM_HOTKEY 消息。
cbm6666 2009-12-27
  • 打赏
  • 举报
回复
你的hotkey不能这样写 懒得改你的

Private Sub ProcessMessages()
Dim Message As Msg
Do While Not bCancel
WaitMessage
If PeekMessage(Message, Me.hWnd, WM_HOTKEY, WM_HOTKEY, PM_REMOVE) Then
if check1.Value=1 then WindowState = vbMinimized
End If
DoEvents
Loop
End Sub
slowgrace 2009-12-27
  • 打赏
  • 举报
回复
    On Error GoTo Q 'On Error要放在函数或过程的第一句,不然无法捕捉所有错误'

If (Check1.Value = Unchecked) Then
HotKey vbKey2 '注册热键
Else
Check1.Value = Unchecked '加上这句'
HotKey_Flg = True '停止热键等待
Call UnregisterHotKey(Me.Hwnd, &HBCFF&)
End If

Exit Sub
Q: '错误处理要放在正常流程之后,不然扰乱正常流程'
Debug.Print "check1_error"
Stop
Resume
End Sub
sxj0384 2009-12-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 cbm666 的回复:]
CheckBox 不需要你用代码去改变 点了它 就是0与1自动转换 你只要判断是0与1 其它不用你管
[/Quote]
这个已经改过来了代码如下:

If (Check1.Value = Unchecked) Then
on error goto Q:
HotKey vbKey2 '注册热键
Else

HotKey_Flg = True '停止热键等待
 Call UnregisterHotKey(Me.hWnd, &HBCFF&)
Q: debug.print "check1_error"
End If


,可是那个勾一勾上,他就没法去掉了,怎么回事?
cbm6666 2009-12-27
  • 打赏
  • 举报
回复
CheckBox 不需要你用代码去改变 点了它 就是0与1自动转换 你只要判断是0与1 其它不用你管
sxj0384 2009-12-27
  • 打赏
  • 举报
回复
改过了,可是没有溢出了,可是那个勾一勾上就去不掉了,怎么回事??
怎么处理才能正常勾选??
谢谢指教~~

1,453

社区成员

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

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