怎么用ENTER键代替TAB键?先要设置好TABINDEX再写代码吗?代码又怎么写?谢谢了

解决方案 »

  1.   

    Private Sub Text1_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then SendKeys "{Tab}"
    End Sub
      

  2.   

    TABINDEX当然要设置好了
    还有不能设置default否则回车会自动确定
    然后在所有需要使用替换的控件的KeyPress事件中用楼上的代码就可以了
    If KeyAscii = 13 Then SendKeys "{Tab}"
      

  3.   

    楼上的方法在没有打 SP2 补丁的 Win2k 系统中会造成键盘锁死。最好如下:
    用下列API函数替代Sendkeys:

    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte,ByVal _
     bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)Const KEYEVENTF_KEYUP = &H2
    Const VK_TAB = &H9keybd_event VK_TAB, 0, 0, 0
    keybd_event VK_TAB, 0, KEYEVENTF_KEYUP, 0或
    2
    Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" _
     (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
       ByVal lParam As Long) As LongConst WM_KEYDOWN As Long = &H100
    Const VK_TAB As Long = &H9
    Dim retVal as longretVal = PostMessage(Me.hwnd, WM_KEYDOWN, VK_TAB, 0)
      

  4.   

    在所有需要使用替换的控件的KeyPress事件中写代码,晕!那不得麻烦死了,不能统一设置吗?不能只设置一次就可以了?
      

  5.   

    (1)做一个类cControl,可以把所有需要对TXT的操作都封装在里面
    Option Explicit
    Private WithEvents MyTxt As TextBoxPublic Sub Attach_Txt(txt1 As TextBox)
    On Error GoTo err    '接受外部变量到mytxt中
        Set MyTxt = txt1Exit Suberr:
        MsgBox err.Description
        Exit Sub
        
    End SubPrivate Sub MyTxt_KeyPress(KeyAscii As Integer)
    On Error Resume Next    Dim sTemplate As String    sTemplate = "'/|!@#$%^&*()_+-=" '用来存放不接受的字符
        If InStr(1, sTemplate, Chr(KeyAscii)) > 0 Then KeyAscii = 0    If KeyAscii = 13 Then SendKeys "{TAB}"End Sub
    (2)在窗体中引用一下即可.如:
    cControl.Attach_Txt txtCode
      

  6.   

    不必光顾所有控件:
    Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" _
     (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
       ByVal lParam As Long) As Long
    Const WM_KEYDOWN As Long = &H100
    Const VK_TAB As Long = &H9Private Sub Form_Load()
        me.KeyPreview = true
    End IfPrivate Sub Form_KeyPress(KeyAscii As Integer)
        Dim retVal As Long
        If KeyAccii = 13 Then retVal = PostMessage(Me.hwnd, WM_KEYDOWN, VK_TAB, 0)
    End Sub
      

  7.   

    楼上的方法真麻烦
    难道每想过用控件数组吗?把控制框复制一下然后粘贴几次
    之后在数组的KeyPress里设置一下
    Private Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer)
    If KeyAscii = 13 Then SendKeys "{Tab}"
    End Sub
      

  8.   

    看我的这个
    托几个名为text1的控件数组,然后沾下边的代码就行了。Option ExplicitDim m_Index As LongPrivate Sub Form_Load()
        KeyPreview = True
    End SubPrivate Sub Form_KeyPress(KeyAscii As Integer)
        If KeyAscii = 13 Then
            m_Index = IIf(m_Index = Text1.Count - 1, 0, m_Index + 1)
            Text1.Item(m_Index).SetFocus
        End IfEnd SubPrivate Sub Text1_GotFocus(Index As Integer)
        m_Index = Index
        Text1(m_Index).SelStart = 0
        Text1.Item(m_Index).SelLength = Len(Text1.Item(m_Index).Text)
    End Sub
      

  9.   

    楼上的方法真麻烦
    难道每想过用控件数组吗?只怕是还有 ComboBox, DTPicker,…… 控件要用。