用vb开发一程序,启动画面运行比较慢,如果连续按键盘,有时就会出错!能否在程序画面没有完全启动完毕时,让程序不接受键盘的指令?

解决方案 »

  1.   

    If KeyAscii Then
       KeyAscii = 0
    End If
      

  2.   

    恩!是啊!
    写在keypress事件里!
      

  3.   

    没有必要,在load主程序的过程中,先出一个启动画面,只是一个画面,没有任何功能,当然按键盘也没有任何反应
      

  4.   

    Option Explicit
    Dim flag As BooleanPrivate Sub Form_Activate()
        flag = False
    End SubPrivate Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
        If flag = True Then
           If Shift <> 0 And KeyCode <> 0 Then
               Shift = 0
               KeyCode = 0
            End If
          End If
    End Sub'Private Sub Form_KeyPress(KeyAscii As Integer)
    '    If KeyAscii <> 0 Then
    '        KeyAscii = 0
    '    End If
    '
    'End SubPrivate Sub Form_Load()
        flag = True
    End Sub
    这样运行以后也不能作用,可以用一个变量flag在load时为真从而便上面运行,在form_active中置为false(keypress不能实现)
      

  5.   

    启动画面必须始终处于最前端,用API函数
    SetWindowPos Me.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, Flag声明:
    Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
    Public Const SWP_NOMOVE = &H2 '不移动窗体
    Public Const SWP_NOSIZE = &H1 '不改变窗体尺寸
    Public Const Flag = SWP_NOMOVE Or SWP_NOSIZE
    Public Const HWND_TOPMOST = -1 '窗体总在最前面
    Public Const HWND_NOTOPMOST = -2 '窗体不在最前面
      

  6.   

    没有必要,在load主程序的过程中,先出一个启动画面,只是一个画面,没有任何功能,当然按键盘也没有任何反应
      

  7.   

    可能我没说清楚,如果按了太多的键盘,启动画面启动完了后,再进入第二个画面的时候,第二个画面的第3方控件会报错。也就是第3方控件其实接收到了前面画面的键盘。能否每个画面启动的时候,用api将键盘锁定,画面启动完了后,在恢复键盘
    每个人都有分哟!!!
      

  8.   

    那就先把那个控件 disable,要不就在空间的键盘响应事件中处理。用api处理比较麻烦,要用到消息处理,或者是钩子
      

  9.   

    先屏蔽掉键盘,画面启动完了后,在恢复键盘
    在每一个启动画面的初始化中加入
    If KeyAscii Then
       KeyAscii = 0
    End If