我正在创建一个虚拟字母数字小键盘(屏幕截图: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。
答案 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
此致
卡维尔。