关于TextBox的一个有意思的现象:
把Text1,Text2,Text3的MultiLine置为true后,按下键盘的上下键,能响应用于测试的MsgBox,但却不能转移焦点,但是对于左右键却可以,不知为什么。请高手指点一下!
代码如下:
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
       Select Case KeyCode              
             Case vbKeyRight:
                    MsgBox "KeyRight Pressed"
                    Text2.SetFocus
            Case vbKeyUp:
                    MsgBox "KeyUp Pressed"
                    Text2.SetFocus
        End Select
End SubPrivate Sub Text2_KeyDown(KeyCode As Integer, Shift As Integer)
     Select Case KeyCode
            Case vbKeyLeft:               
                    MsgBox "KeyLeft Pressed"
                    Text1.SetFocus 
            Case vbKeyDown:               
                    MsgBox "KeyDown Pressed"
                    Text1.SetFocus 
              
             Case vbKeyRight:                
                    MsgBox "KeyRight Pressed"
                    Text3.SetFocus
            Case vbKeyUp:                
                    MsgBox "KeyUp Pressed"
                    Text3.SetFocus
    End Select
End SubPrivate Sub Text3_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
            Case vbKeyLeft:               
                    MsgBox "KeyLeft Pressed"
                    Text2.SetFocus 
           Case vbKeyDown:               
                    MsgBox "KeyDown Pressed"
                    Text2.SetFocus 
        End Select
End Sub

解决方案 »

  1.   

    Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
           Select Case KeyCode              
                 Case vbKeyRight:
                        Text2.SetFocus
                        MsgBox "KeyRight Pressed"
                        
                Case vbKeyUp:
                        Text2.SetFocus
                        MsgBox "KeyUp Pressed"
                        
            End Select
    End Sub
    这样呢?
      

  2.   

    to  victorycyz(中海) :结果一样,不起作用。
    另外似乎有一个现象:比如丛text2按up,光标好象闪到tex3后又闪回来了。(有时出现这个现象,希望不是我看看花眼了:))
      

  3.   

    先把text3_keydown()注释掉看看。
      

  4.   

    Private Sub Text2_KeyDown(KeyCode As Integer, Shift As Integer)
           Select Case KeyCode 
                 Case vbKeyReturn
                        text3.setfocus             
                 Case vbKeyDown
                        Text3.SetFocus
                        MsgBox "KeyRight Pressed"
                        
                Case vbKeyUp
                        Text1.SetFocus
                        MsgBox "KeyUp Pressed"
                        
            End Select
    End Sub
      

  5.   

    to victorycyz(中海) :试了,也不管用。应该没什么关系,不然,左右键怎么行呢?
    to Leftie(Leftie) :也不行,更本执行不到Case vbKeyReturn这一句,我设断点试了。
      

  6.   

    已改过,并通过了!Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
           Select Case KeyCode
                Case vbKeyLeft:
                        MsgBox "KeyLeft Pressed"
                        Text3.SetFocus
                Case vbKeyDown:
                        MsgBox "KeyDown Pressed"
                        Text2.SetFocus
                Case vbKeyRight:
                        MsgBox "KeyRight Pressed"
                        Text2.SetFocus
                Case vbKeyUp:
                        MsgBox "KeyUp Pressed"
                        Text3.SetFocus
            End Select
            KeyCode = vbKeyCancel
    End SubPrivate Sub Text2_KeyDown(KeyCode As Integer, Shift As Integer)
         Select Case KeyCode
                Case vbKeyLeft:
                        MsgBox "KeyLeft Pressed"
                        Text1.SetFocus
                Case vbKeyDown:
                        MsgBox "KeyDown Pressed"
                        Text3.SetFocus
                Case vbKeyRight:
                        MsgBox "KeyRight Pressed"
                        Text3.SetFocus
                Case vbKeyUp:
                        MsgBox "KeyUp Pressed"
                        Text1.SetFocus
        End Select
            KeyCode = vbKeyCancel
    End SubPrivate Sub Text3_KeyDown(KeyCode As Integer, Shift As Integer)
        Select Case KeyCode
                Case vbKeyLeft:
                        MsgBox "KeyLeft Pressed"
                        Text2.SetFocus
                Case vbKeyDown:
                        MsgBox "KeyDown Pressed"
                        Text1.SetFocus
                Case vbKeyRight:
                        MsgBox "KeyRight Pressed"
                        Text1.SetFocus
                Case vbKeyUp:
                        MsgBox "KeyUp Pressed"
                        Text2.SetFocus
            End Select
            KeyCode = vbKeyCancel
    End Sub
      

  7.   

    谢谢各位,用 DaiLM()的方法把问题解决了! DaiLM() 能否解释一下为什么要用
            KeyCode = vbKeyCancel
    ,为什么左右键不用没问题,而上下键就必须用呢?谢谢!
      

  8.   

    vbkeycancel表示按键取消,也就是表示不按键
    你可以根据自己的要求改变其位置以达到目的
      

  9.   

    比如:Private Sub Text3_KeyDown(KeyCode As Integer, Shift As Integer)
        Select Case KeyCode
                Case vbKeyLeft:
                        MsgBox "KeyLeft Pressed"
                        Text2.SetFocus
                        keycode=vbkeycancel
                Case vbKeyDown:
                        MsgBox "KeyDown Pressed"
                        Text1.SetFocus
                        keycode=vbkeycancel
                Case vbKeyRight:
                        MsgBox "KeyRight Pressed"
                        Text1.SetFocus
                Case vbKeyUp:
                        MsgBox "KeyUp Pressed"
                        Text2.SetFocus
            End Select
    End Sub这时按左和下后就不会对下一控件产生作用了,但是右和上有可能还会对下一控件产生作用