使用vb.net创建字母数字键盘

时间:2013-07-02 14:39:57

标签: vb.net numeric alphanumeric virtual-keyboard keypad

我正在创建一个虚拟字母数字小键盘(屏幕截图:https://www.dropbox.com/s/rmlmct30bnvihkx/keypad.png),并且需要一些有关其背后代码的帮助。这个练习的整个目的是使用vb.net(在visual studio 2010中)创建这个应用程序,并让它像手机一样在文本框中输入文本。这个应用程序将在带触摸屏的计算机上运行。我已经能够成功地为这个键盘编写代码,以便以下列方式运行:

1)用户首先选择与他们想要输入的3个字母中的一个相关联的数字,EG用户如果需要输入A,B或C则选择1个。然后3个框出现在“Num”按钮的左侧与相应数字相关的值。

2)然后用户选择其中一个字母并将其添加到文本框中,并重复1中的过程。

1按钮的代码示例:

    Private Sub btn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn1.Click
    Dim cursorPos As Integer = _SourceControl.SelectionStart
    If numlock = False Then
        btnAlpha1.Visible = True
        btnAlpha1.Text = "A"
        btnAlpha2.Visible = True
        btnAlpha2.Text = "B"
        btnAlpha3.Visible = True
        btnAlpha3.Text = "C"
    ElseIf numlock = True Then
        _sourceForm.ActiveControl = _SourceControl
        _SourceControl.SelectedText += "1"
        _SourceControl.Select(cursorPos + 1, 0)
    End If

End Sub

相应填充值的3个空白框的代码示例:

 Private Sub btnAlpha3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAlpha3.Click
    Dim cursorPos As Integer = _SourceControl.SelectionStart
    _sourceForm.ActiveControl = _SourceControl

    _SourceControl.SelectedText += btnAlpha3.Text
    _SourceControl.Select(cursorPos + 1, 0)
End Sub

Private Sub btnAlpha2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAlpha2.Click
    Dim cursorPos As Integer = _SourceControl.SelectionStart
    _sourceForm.ActiveControl = _SourceControl

    _SourceControl.SelectedText += btnAlpha2.Text
    _SourceControl.Select(cursorPos + 1, 0)
End Sub

Private Sub btnAlpha1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAlpha1.Click
    Dim cursorPos As Integer = _SourceControl.SelectionStart
    _sourceForm.ActiveControl = _SourceControl

    _SourceControl.SelectedText += btnAlpha1.Text
    _SourceControl.Select(cursorPos + 1, 0)
End Sub

但是这被证明是一种繁琐的方法,可以纠正一种非常繁琐的文本输入方法,所以我想尝试制作类似于手机的键盘。

我需要的只是一个按钮(ABC / 1)的代码示例,我将解决其余的问题。提前感谢您的帮助。

(这是一个Windows窗体应用程序)

此致

Kavir Maharaj。

1 个答案:

答案 0 :(得分:0)

嘿伙计:)首先感谢所有看过我的问题的人,尤其感谢Idle_Mind提出的建议。我能够找到一个解决方案,并得到我需要的东西,它仍然非常“Buggy”,并且有很多东西可以解决,但核心概念已经实现。解决方案的代码如下(请原谅代码中的注释,因为我在完成所有工作之后进行清理):

Public Class Form1
Dim WithEvents intTimer As New System.Timers.Timer
Dim hitCounter As Integer = 1
Dim value As String = ""

Public Sub startTimer()
    intTimer.Interval = 1500
    intTimer.Start()
End Sub

Public Sub setText_1()
    If Me.txtInput.InvokeRequired Then
        Me.txtInput.Invoke(New MethodInvoker(AddressOf setText_1))
    Else
        Dim cursorPos As Integer = txtInput.SelectionStart
        txtInput.Select(cursorPos + 1, 0)
        Me.ActiveControl = txtInput
        hitCounter = 1
        value = ""
    End If
End Sub

Public Sub timer_Elapsed(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles intTimer.Elapsed
    setText_1()
    intTimer.Stop()
End Sub

Public Sub BtnLoseFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn1.Leave, btn2.Leave, btn3.Leave, btn4.Leave, btn5.Leave, btn6.Leave, btn7.Leave, btn8.Leave, btn9.Leave
    txtInput.SelectedText += value
    hitCounter = 1
End Sub

Private Sub btn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn1.Click
    If btn1.Focused Then
        startTimer()
        If hitCounter <= 3 Then
            Select Case hitCounter
                Case 1
                    'txtInput.Text += "A"
                    value = "A"
                Case 2
                    'txtInput.Text = "B"
                    value = "B"
                Case 3
                    'txtInput.Text += "C"
                    value = "C"
                Case Else
                    'txtInput.SelectedText += "1"
                    value = "1"
            End Select
            hitCounter += 1
        End If
    Else
        hitCounter = 1
    End If
End Sub

Private Sub btn2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn2.Click
    'hitCounter = 1
    If btn2.Focused Then
        startTimer()
        If hitCounter <= 3 Then
            Select Case hitCounter
                Case 1
                    'txtInput.Text += "A"
                    value = "D"
                Case 2
                    'txtInput.Text = "B"
                    value = "E"
                Case 3
                    'txtInput.Text += "C"
                    value = "F"
                Case Else
                    'txtInput.SelectedText += "1"
                    value = "2"
            End Select
            hitCounter += 1
        End If
    End If
End Sub

Private Sub btn3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn3.Click
    'hitCounter = 1
    startTimer()
    If hitCounter <= 3 Then
        Select Case hitCounter
            Case 1
                'txtInput.Text += "A"
                value = "G"
            Case 2
                'txtInput.Text = "B"
                value = "H"
            Case 3
                'txtInput.Text += "C"
                value = "I"
            Case Else
                'txtInput.SelectedText += "1"
                value = "3"
        End Select
        hitCounter += 1
    End If
End Sub

Private Sub btn4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn4.Click
    'hitCounter = 1
    startTimer()
    If hitCounter <= 3 Then
        Select Case hitCounter
            Case 1
                'txtInput.Text += "A"
                value = "J"
            Case 2
                'txtInput.Text = "B"
                value = "K"
            Case 3
                'txtInput.Text += "C"
                value = "L"
            Case Else
                'txtInput.SelectedText += "1"
                value = "4"
        End Select
        hitCounter += 1
    End If
End Sub

Private Sub btn5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn5.Click
    'hitCounter = 1
    startTimer()
    If hitCounter <= 3 Then
        Select Case hitCounter
            Case 1
                'txtInput.Text += "A"
                value = "M"
            Case 2
                'txtInput.Text = "B"
                value = "N"
            Case 3
                'txtInput.Text += "C"
                value = "O"
            Case Else
                'txtInput.SelectedText += "1"
                value = "5"
        End Select
        hitCounter += 1
    End If
End Sub

Private Sub btn6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn6.Click
    'hitCounter = 1
    startTimer()
    If hitCounter <= 3 Then
        Select Case hitCounter
            Case 1
                'txtInput.Text += "A"
                value = "P"
            Case 2
                'txtInput.Text = "B"
                value = "Q"
            Case 3
                'txtInput.Text += "C"
                value = "R"
            Case Else
                'txtInput.SelectedText += "1"
                value = "6"
        End Select
        hitCounter += 1
    End If
End Sub

Private Sub btn7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn7.Click
    'hitCounter = 1
    startTimer()
    If hitCounter <= 3 Then
        Select Case hitCounter
            Case 1
                'txtInput.Text += "A"
                value = "S"
            Case 2
                'txtInput.Text = "B"
                value = "T"
            Case 3
                'txtInput.Text += "C"
                value = "U"
            Case Else
                'txtInput.SelectedText += "1"
                value = "7"
        End Select
        hitCounter += 1
    End If
End Sub

Private Sub btn8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn8.Click
    'hitCounter = 1
    startTimer()
    If hitCounter <= 3 Then
        Select Case hitCounter
            Case 1
                'txtInput.Text += "A"
                value = "V"
            Case 2
                'txtInput.Text = "B"
                value = "W"
            Case 3
                'txtInput.Text += "C"
                value = "X"
            Case Else
                'txtInput.SelectedText += "1"
                value = "8"
        End Select
        hitCounter += 1
    End If
End Sub

Private Sub btn9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn9.Click
    'hitCounter = 1
    startTimer()
    If hitCounter <= 2 Then
        Select Case hitCounter
            Case 1
                'txtInput.Text += "A"
                value = "Y"
            Case 2
                'txtInput.Text = "B"
                value = "Z"
            Case Else
                'txtInput.SelectedText += "1"
                value = "9"
        End Select
        hitCounter += 1
    End If
End Sub

Private Sub btnBackSpace_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBackSpace.Click
    Dim cursorPos As Integer = txtInput.SelectionStart
    If txtInput.Text.Length > 0 Then
        Me.ActiveControl = txtInput
        txtInput.Text = txtInput.Text.Remove(cursorPos - 1, 1)
        txtInput.Select(cursorPos - 1, 0)
    Else
        'Do nothing
        Me.ActiveControl = txtInput
    End If
End Sub

Private Sub btn0_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn0.Click
    'spacebar
    Dim cursorPos As Integer = txtInput.SelectionStart
    Me.ActiveControl = txtInput
    txtInput.SelectedText += " "
    txtInput.Select(cursorPos + 1, 0)
End Sub

结束班

用于测试的GUI的屏幕截图:https://www.dropbox.com/s/8s26po807v6kkoj/keypad-test%20Interface.png

此致

卡维尔。