嘿伙计们 :) 首先感谢所有查看我的问题的人,特别是 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
问候,
卡维尔。