Создание буквенно-цифровой клавиатуры с помощью vb.net

Я создаю виртуальную буквенно-цифровую клавиатуру (скриншот: https://www.dropbox.com/s/rmlmct30bnvihkx/keypad.png ) и нужна помощь с написанным за ним кодом. Вся цель этого упражнения состоит в том, чтобы создать это приложение с помощью vb.net (в Visual Studio 2010) и заставить его вводить текст в текстовое поле, как это делает мобильный телефон. Это приложение будет работать на компьютере с сенсорным экраном. Мне удалось успешно написать код для работы этой клавиатуры следующим образом:

1) Сначала пользователь выбирает номер, связанный с одним из 3 алфавитов, которые он хочет ввести, например, пользователь выбирает 1, если ему нужно ввести A, B или C. Затем слева от кнопки «Число» появляются 3 поля со значениями. связанные с соответствующим номером.

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 Forms)

С уважением,

Кавир Махарадж.


person KavirM    schedule 02.07.2013    source источник
comment
Ваш код для трех всплывающих окон абсолютно одинаков и может быть объединен в один метод, который приводит параметр sender. Что касается начальной части, вы можете использовать Dictionary(), чтобы связать каждую кнопку с тремя буквами для всплывающих окон. Код не должен быть таким длинным...   -  person Idle_Mind    schedule 02.07.2013


Ответы (1)


Привет, ребята :) во-первых, спасибо всем, кто просматривал мой вопрос, и особенно Idle_Mind за предложение. Я смог найти решение и получить то, что мне нужно. Это все еще очень «багги», и нужно разобраться во многих вещах, но основная концепция была достигнута. Код решения выглядит следующим образом (извините за комментарии в коде, так как я выполняю очистку после того, как все работает как надо):

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

Конец класса

Скриншот графического интерфейса, использованного для тестирования: https://www.dropbox.com/s/8s26po807v6kkoj/keypad-test%20Interface.png

С уважением,

Кавир.

person KavirM    schedule 03.07.2013