VB中如何屏蔽回车和空格键

binghe7 2005-02-23 08:41:59
一个form内只有一个command按钮,默认焦点,现在按回车和空格键,或者鼠标点击都可以进入下一个画面,
但我需要屏蔽调回车和空格键的作用,如何实现,求助。
...全文
474 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
binghe7 2005-02-23
  • 打赏
  • 举报
回复
顶下,都吃饭回来了八
binghe7 2005-02-23
  • 打赏
  • 举报
回复
楼上的没看清楚,现在是回车键没用,不是空格
楼上的楼上的,能不能找点简单介绍钩子的东东来看,你写的偶看不明白
Zygodactyous 2005-02-23
  • 打赏
  • 举报
回复
在按钮的keypress事件中处理
Private Sub Comman1_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeySpace Then
KeyAscii = 0
Exit Sub
End If
End Sub
taosin 2005-02-23
  • 打赏
  • 举报
回复
试一下用钩子技术,这里是截取Combo1的WM_MOUSEMOVE的消息 ,改一下截取Command1 的vbKeySpace和vbKeyReturn的消息就行了:
'以下程式在module1.bas

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_MOUSEMOVE = &H200

Public Const WM_RBUTTONDOWN = &H204





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

'以下程式会截取mouse move,处理完後,再将之送往原来的Window Procedure

If Msg = WM_MOUSEMOVE Then

'请处理Mouse Move的动作

Debug.print "Combol Mouse Move "

End if

'将之送往原来的Window Procedure

wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)

End Function



'以下程式在Form1, form1中有一Combo1

Sub Form_Load()

Dim ret As Long

'记录原本的Window Procedure的位址

preWinProc = GetWindowLong(Combo1.hwnd, GWL_WNDPROC)

'设定Combo1的window Procedure到wndproc

ret = SetWindowLong(Combo1.hwnd, GWL_WNDPROC, AddressOf wndproc)

End Sub



Private Sub Form_Unload(Cancel As Integer)

Dim ret As Long

'取消Message的截取,而使之又只送往原来的Window Procedure

ret = SetWindowLong(Combo1.hwnd, GWL_WNDPROC, preWinProc)

End Sub

binghe7 2005-02-23
  • 打赏
  • 举报
回复
问题就是在这里啊,痛苦~就命啊~~~^_^
xmuyyd 2005-02-23
  • 打赏
  • 举报
回复
我试了一下也是这样,三个事件都无法捕捉到回车键。关注ing.
binghe7 2005-02-23
  • 打赏
  • 举报
回复
在线等待,不可以设置隐藏控件的方法让焦点移开,还有好办法吗,指教
闲情漫步 2005-02-23
  • 打赏
  • 举报
回复
是啊,我的水平有限,我做出来的也是屏蔽空格键,但是回车键我屏蔽不掉,因为按下回车键后似乎不触发keypress事件,keyup keydown也是如此.
可不可以做一个不可见的控件,让其得到焦点,并用其keypress事件来判断按下的键,如果是回车或是空格,就不触发任何事件.
binghe7 2005-02-23
  • 打赏
  • 举报
回复
我是这样做的
Private Sub Command1_KeyDown(KeyCode As Integer,Shift As Integer)

If KeyCode = vbKeySpace Or KeyCode = vbKeyretrun Then
KeyCode = 0
End If

End Sub

另外有一个函数Private Sub Command1_Click()

现在问题是按空格键进入Command1_KeyDown函数,空格操作可以实现,但如果按回车键程序直接进入Command1_Click函数,而不进入Command1_KeyDown函数函数,回车无法屏蔽
mahua2003 2005-02-23
  • 打赏
  • 举报
回复
不全,但是希望对你有所帮助!
Private Sub Command1_Click()

MsgBox "The next form!"
End Sub



Private Sub Command1_KeyPress(KeyAscii As Integer)

If KeyAscii = vbKeySpace Then
KeyAscii = 0
MsgBox "Can't not use Space key"
End If

End Sub
binghe7 2005-02-23
  • 打赏
  • 举报
回复
谢谢,不过前提条件,这个form内的东西是不能改变的,只能靠程序实现
griefforyou 2005-02-23
  • 打赏
  • 举报
回复
把这个command的tabstop 设为false,然后再加一个command,把他放到窗口外面。
viena 2005-02-23
  • 打赏
  • 举报
回复
用Command1_MouseDown事件+Command1_MouseUp事件代替Command1_Click事件~
binghe7 2005-02-23
  • 打赏
  • 举报
回复
~~~???anybody here??
作者:星光   编程原理详解:   Image1是背景,Image2是人物(玩家),image3是子弹,image4是敌人,image5是敌人子弹,   Label1有来显示“START”和“GAMEOVER”的,Label2和Label3用来显示任务状态,   Label4和Label5显示生命值,label6显示关数,Label7显示是否发大招,   Label8和Label9是用来直观显示生命值的,算法为:Label8.Width = Label4 * 10,这几个Label控件在代码起到间接判断的作用   Timer1控制人上升,Timer2控制人下降, Timer3和Timer4控制让玩家子弹移动,Timer5控制第一关敌人车和子弹移动   Timer6判断子弹与人是否相碰,并减小生命值,Timer7控制第二关大怪上下移动,Timer8控制第三关子弹机车的移动   所有Picture控件的图片,都是用于人物发生动作时(有的图片没用上),进行与Image图片切换,图片切换时,让人感觉image内的图片真动了!   键盘控制说明一下,空格键负责“跳”动作,Shift键和回车键控制发大招,W、S、A、D与方向键命令一样   下面这段代码是延时代码,出现过很多次,作用是:让两张图片切换时能让我们看见,VB执行速度很快,不加入这个就会看不出来图片切换   Dim Savetime As Single   Savetime = Timer ‘记下开始的时间   While Timer < Savetime 2 ‘循环等待   DoEvents ‘控制权,以便让操作系统处理其它的事件。   Wend   好了说到这里,这是我做的第二个,还不是很完善,希望大家下载鼓励一下!里有操作说明:空格键负责“跳”动作,回车键发招,Shift键和回车键组合发大招。W、S、A、D和方向键命令一样(会玩的用前者,会玩卡丁车的用后者)

7,762

社区成员

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

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