这里有新的海报和各种VB黑客。
我有一个包含图片框和三个文本框的窗体。 三个文本框(红色,绿色,蓝色)用于输入从000到255的数值,表示颜色代码。 PictureBox将显示三个TextBox值的结果颜色。
我的验证例程ValidDecCode确保输入的值在允许的限制范围内(000-255)。
如果用户在第一个位置输入'2',那么一切都很好。如果用户在第二个位置输入“6”,则不会通过我的验证测试。
输入KeyDown事件后,我保存sender.selectionstart和sender.text值。输入'6'后,selectionstart将为1,文本包含已经过验证的数据,'2'。
一旦'6'验证测试失败,我会显示一个MessageBox,重新加载我保存的发件人数据,文本和selectionstart。这会将表单返回到进入'6'之前的状态。 TextBox将显示“2”,光标位于“2”之后。
我觉得奇怪的是,如果我注释掉MessageBox.Show()行,TextBox将在验证失败后显示“26”。如果我注释掉我的发件人数据的重新加载而不是MessageBox.Show()行,TextBox将显示“26”。
我想知道为什么注释掉MessageBox.Show()行不会在输入无效数据之前将表单返回到其状态,我该怎么办呢。调用使其工作的MessageBox有什么用呢?
Private Sub RedBox_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) _
Handles RedBox.KeyDown, GreenBox.KeyDown, BlueBox.KeyDown
Dim InChr As String
Dim InPos As Integer = sender.selectionstart
Dim InText As String = sender.text
If IsNumeric(Chr(e.KeyCode)) Then
InChr = Chr(e.KeyValue)
If Not ValidDecCode(InText + InChr, InPos) Then
MessageBox.Show("Invalid value")
sender.text = InText
sender.selectionstart = InPos
End If
Else
MessageBox.Show("Invalid value")
sender.Text = InText
sender.selectionstart = InPos
Exit Sub
End If
End Sub