Создание буквенно-цифровой клавиатуры с помощью vb.net
Я создаю виртуальную буквенно-цифровую клавиатуру (снимок экрана: https://www.dropbox.com/s/rmlmct30bnvihkx/keypad.png) и мне нужна помощь с кодом, который стоит за ней. Целью этого упражнения является создание этого приложения с использованием vb.net (в Visual Studio 2010), которое позволяет вводить текст в текстовое поле, как это делает мобильный телефон. Это приложение будет работать на компьютере с сенсорным экраном. Мне удалось успешно написать код для этой клавиатуры, чтобы она функционировала следующим образом:
1) Пользователь сначала выбирает номер, связанный с одним из 3 алфавитов, которые он хочет набрать, например, пользователь EG выбирает 1, если ему нужно ввести A, B или C. 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 Forms)
С Уважением,
Кавир Махарадж
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
С Уважением,
Кевир.