如何在vb6中处理“回车”选项卡? 此代码属于登录表单 txtUserCode包含存储在数据库中的特定用户的代码 运行此表单时,当我在txtUserCode中输入任何数字并按enter键时,它不会进入下一个文本框,它的键ASCII变为49,不等于13 按tab键也会发生同样的情况

如何在vb6中处理“回车”选项卡? 此代码属于登录表单 txtUserCode包含存储在数据库中的特定用户的代码 运行此表单时,当我在txtUserCode中输入任何数字并按enter键时,它不会进入下一个文本框,它的键ASCII变为49,不等于13 按tab键也会发生同样的情况,vb6,Vb6,使用setFocus方法而不是模拟选项卡切换到下一个文本字段怎么样 还可以使用控件数组(表单中包含的所有文本字段的数组)并递增索引。因此,您可以将此代码用于表单的所有文本字段,而无需编写冗余代码 因此,如果用户在文本字段索引0中按return,则将焦点设置为索引+1(=1)。要创建控件数组,请复制第一个文本字段并将其粘贴到表单中。VB6将询问您是否要创建控件数组。如果您单击“是”,它将自动执行。然后可以使用以下代码: Private Sub txtUserCode_KeyPress(KeyAsc

使用
setFocus
方法而不是模拟选项卡切换到下一个文本字段怎么样

还可以使用控件数组(表单中包含的所有文本字段的数组)并递增索引。因此,您可以将此代码用于表单的所有文本字段,而无需编写冗余代码

因此,如果用户在文本字段索引0中按return,则将焦点设置为索引+1(=1)。要创建控件数组,请复制第一个文本字段并将其粘贴到表单中。VB6将询问您是否要创建控件数组。如果您单击“是”,它将自动执行。然后可以使用以下代码:

Private Sub txtUserCode_KeyPress(KeyAscii As Integer)
    If (KeyAscii = vbKeyReturn) Then
        txtNextTextField.setFocus
    End If
End Sub
Private Sub txtField\u按键(索引为整数,keyscii为整数)
如果(KeyAscii=vbKeyReturn),则
如果((索引+1)
使用
setFocus
方法而不是模拟选项卡切换到下一个文本字段怎么样

还可以使用控件数组(表单中包含的所有文本字段的数组)并递增索引。因此,您可以将此代码用于表单的所有文本字段,而无需编写冗余代码

因此,如果用户在文本字段索引0中按return,则将焦点设置为索引+1(=1)。要创建控件数组,请复制第一个文本字段并将其粘贴到表单中。VB6将询问您是否要创建控件数组。如果您单击“是”,它将自动执行。然后可以使用以下代码:

Private Sub txtUserCode_KeyPress(KeyAscii As Integer)
    If (KeyAscii = vbKeyReturn) Then
        txtNextTextField.setFocus
    End If
End Sub
Private Sub txtField\u按键(索引为整数,keyscii为整数)
如果(KeyAscii=vbKeyReturn),则
如果((索引+1)
有一个KB142816,其参考实现与您的类似。但是IMO最重要的部分是免责声明:

可以使用ENTER键将焦点移动到控件 下一个更高的TabIndex属性值,与TAB键一样

但是,使用ENTER键移动焦点不会跟随 推荐的基于Microsoft Windows的应用程序设计指南。这个 ENTER键应用于处理默认命令或 输入信息,不移动焦点

无论如何,你的代码不起作用的原因是个谜。由于Tab和Enter都不会将焦点从
txtUserCode
字段移动,因此我唯一的猜测是
txtUserCode
TabStop
属性设置为
True
的唯一字段。也就是说,没有其他控件可以移动焦点。

有一个KB142816,其参考实现与您的类似。但是IMO最重要的部分是免责声明:

可以使用ENTER键将焦点移动到控件 下一个更高的TabIndex属性值,与TAB键一样

但是,使用ENTER键移动焦点不会跟随 推荐的基于Microsoft Windows的应用程序设计指南。这个 ENTER键应用于处理默认命令或 输入信息,不移动焦点


无论如何,你的代码不起作用的原因是个谜。由于Tab和Enter都不会将焦点从
txtUserCode
字段移动,因此我唯一的猜测是
txtUserCode
TabStop
属性设置为
True
的唯一字段。也就是说,没有其他控件可以移动焦点。

MrSnurb给出的示例是一个良好的开端,但它有很多问题,例如,一个控件可能被禁用或不可见(setfocus将崩溃),controlarray中的下一个控件并不意味着它也是使用tab时获得焦点的下一个控件(您可以根据需要设置tabindex)。 我想出了两个“简单”例程(和一个额外的函数),您可以使用它们来转到窗体上的下一个或上一个控件(实际上还没有检查它是否与容器(框架或其他东西)上的控件一起工作),因此可能需要额外的检查

Private Sub txtField_KeyPress(Index As Integer, KeyAscii As Integer)
    If (KeyAscii = vbKeyReturn) Then
        If ((Index + 1) < txtField.Count) Then
            txtField(Index+1).setFocus
        Else
            MsgBox "Reached end of form!"
        End If
    End If
End Sub

MrSnurb给出的示例是一个很好的开始,但它有很多问题,例如,一个控件可能被禁用或不可见(setfocus将崩溃),controlarray中的下一个控件并不意味着它也是使用tab时获得焦点的下一个控件(您可以随意设置tabindex)。 我想出了两个“简单”例程(和一个额外的函数),您可以使用它们来转到窗体上的下一个或上一个控件(实际上还没有检查它是否与容器(框架或其他东西)上的控件一起工作),因此可能需要额外的检查

Private Sub txtField_KeyPress(Index As Integer, KeyAscii As Integer)
    If (KeyAscii = vbKeyReturn) Then
        If ((Index + 1) < txtField.Count) Then
            txtField(Index+1).setFocus
        Else
            MsgBox "Reached end of form!"
        End If
    End If
End Sub

txtUserCode
a
TextBox
?如果是这样,您的代码就可以工作。尝试更改VB处理键盘的方式是一个雷区。以下是一些提示:确保窗体上没有默认属性设置为True的控件。如果是这样,它将阻止[Enter]键。此外,如果没有默认控件,[Enter]键将导致默认的Windows蜂鸣音,除非您在按键事件中将KeyAscii设置为0来抑制它。@cool\u sari您确定您得到的是KeyAscii=49(数字1的ASCII码),而不是9(水平制表符的ASCII码)?是
txtUserCode
一个
TextBox
?如果是这样,你的代码就可以工作了。试图改变VB处理键盘的方式是一个雷区。这里有一些提示:确保你不这样做
Private Sub txt_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)

  Select Case KeyCode 
    Case vbKeyDown, _
         vbKeyReturn
      Call pSetFocusToNextControl(Me)
      KeyCode = 0
    Case vbKeyUp
      Call pSetFocusToPreviousControl(Me)
      KeyCode = 0
  End Select
End Sub