发件人和MessageBox奇怪

时间:2013-03-15 22:36:24

标签: vb.net

这里有新的海报和各种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

0 个答案:

没有答案