分享

如何在TEXT之间移动光标?

 nxhujiee 2019-10-17

  发布时间:2013-03-21

我正在制作的一个系统,一个界面上有多个TEXT,而且要在界面上画一个键盘。在不使用鼠标直接点击TEXT设置焦点的情况下,使用键盘上的按钮,如何能在TEXT之间移动焦点?我是说不模拟TAB和BACKSPACE的情况下?

推荐解决方案

放一个Text1控件数组

Private Sub Command1_Click()
    Static aa As Long
    Text1(aa Mod Text1.Count).SetFocus
    aa = aa + 1
End Sub

其他解决方案

放一个Text1控件数组
Static aa As Long
Private Sub CommandLeft_Click()
    Text1(aa Mod Text1.Count).SetFocus
    aa = aa - 1
End Sub

Private Sub CommandRight_Click()
    Text1(aa Mod Text1.Count).SetFocus
    aa = aa + 1
End Sub
先在需要控制的TEXT的tag属性 写上 方位,格式是: x,y   x为横的方位,y为竖的方位
譬如 第一个TextBox 的tag为1,1 他右边的为 2,1  他下面的就为 1,2


Option Explicit

Private m_col As New Collection
Private Const MAX_X As Integer = 3 '横最多3个 这里我测试 横竖都是3个
Private Const MAX_Y As Integer = 3 '竖最多3个
Private m_strCurFocus As String
Private Sub cmdDown_Click() '向下
    Call GoPos("DOWN")
End Sub
Private Sub cmdUP_Click() '向上
    Call GoPos("UP")
End Sub
Private Sub cmdLeft_Click() '向左
    Call GoPos("Left")
End Sub
Private Sub cmdRight_Click() '向右
    Call GoPos("Right")
End Sub

Function GoPos(strDirect As String)
    Dim strTag As String, strPos() As String, x As Integer, y As Integer
    If m_strCurFocus = "" Then Exit Function
    strPos = Split(m_strCurFocus, ",")
    x = CInt(Trim(strPos(0)))
    y = CInt(Trim(strPos(1)))
    Select Case UCase(strDirect)
        Case "LEFT"
            If (x - 1) < 1 Then '如果是最左边一个的话
                '回到最上一行最后一个
                '注意下面RIGHT DOWN UP也要这样处理,由于是例子 没做处理了
                x = MAX_X
                If y - 1 > 0 Then
                    y = y - 1
                End If
            Else
                x = x - 1
            End If
        Case "RIGHT"
            x = x + 1
        Case "DOWN"
            y = y + 1
        Case "UP"
            y = y - 1
    End Select
    Dim obj As Control
    On Error Resume Next
    Set obj = m_col.Item(x & "," & y) '这里要处理一下 是不是没有这个项目
    On Error GoTo 0
    If Not (obj Is Nothing) Then
        obj.SetFocus
    End If
End Function
Private Sub Form_Load()
Dim obj As Control
For Each obj In Controls
    If TypeName(obj) = "TextBox" Then
        If obj.Tag <> "" Then
            Debug.Print obj.Tag
            m_col.Add obj, obj.Tag '把所有的TextBox添加到集合里
        End If
    End If
Next
End Sub
'使用Timer来纪录 当前的焦点, 因为按了控制方向的按钮后 焦点会是那个按钮 而不是刚才的Text
Private Sub Timer1_Timer()
    If Me.ActiveControl.Tag <> "" Then
        m_strCurFocus = Me.ActiveControl.Tag
    End If
End Sub

其他建议

Text1.SetFocus

另外发送键盘消息 使用SendKeys
为什么一定不模拟呢实在不模拟的话你也可以SetFocus设置焦点呀
Private Sub Command1_Click()
  Text2.SetFocus
End Sub
同意楼上
同意楼上楼上的
在界面上画的键盘有上下左右键,需要在按这些键的时候,在TEXT控件间移动焦点。这个是真正的需求,在向前移动的时候,如果使用BACK,会删除已经输入的内容。
这个问题很有意思。可惜我只会用键盘的方向键控制界面上的textbox的顺序。 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多