在文本框中输入的数字不能超过9个或删除所有输入的数字

时间:2018-10-11 13:56:00

标签: vb.net

因此,我正在为学校编写一个程序,该程序应将摄氏温度转换为华氏温度,反之亦然。该程序工作正常,但是当我尝试在文本框中输入9个以上的数字时,它会崩溃。当我尝试退格并删除先前输入的数字时,会发生相同的问题。谁能告诉我为什么会这样吗?

Private Sub txtEntré_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtEntré.KeyPress
    'Laisse seulement tapper des chiffres dans la boîte de texte
    If cbEntré.SelectedIndex < 0 Then
        txtEntré.ReadOnly = True
    Else
        txtEntré.ReadOnly = False

    End If
    If (e.KeyChar < "0" OrElse e.KeyChar > "9") _
       AndAlso e.KeyChar <> ControlChars.Back Then
        e.Handled = True
    End If


End Sub

Private Sub cb1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbEntré.SelectedIndexChanged
    If cbEntré.SelectedIndex = 1 Then
        cbSortie.SelectedIndex = 0
    ElseIf cbEntré.SelectedIndex = 0 Then
        cbSortie.SelectedIndex = 1
    End If
End Sub

Private Sub txtEntré_TextChanged(sender As Object, e As EventArgs) Handles txtEntré.TextChanged

    Dim Entré As Integer
    Convert.ToInt64(txtEntré.Text)

    If cbEntré.SelectedIndex = 0 Then
        txtSortie.Text = (Entré * 9 / 5) + 32
    ElseIf cbEntré.SelectedIndex = 1 Then
        txtSortie.Text = (Entré - 32) * 5 / 9
    End If

End Sub

结束班级

2 个答案:

答案 0 :(得分:1)

您的代码似乎丢失了一些内容,但您没有告诉我们错误。我假设您将文本框中的数据放入Entré。由于Entré是integer,因此它的值范围是-2,147,483,648至2,147,483,647。超出该范围的任何数字都将失败。这就是为什么您不能超过9个字符的原因(嗯。第一个字符应该为1)。

如果将变量更改为Int64,则范围为-9,223,372,036,854,775,808至9,223,372,036,854,775,807,该范围更大。

答案 1 :(得分:1)

我正在专门研究以下方法:

Private Sub txtEntré_TextChanged(sender As Object, e As EventArgs) Handles txtEntré.TextChanged

    Dim Entré As Integer
    Convert.ToInt64(txtEntré.Text)

    If cbEntré.SelectedIndex = 0 Then
        txtSortie.Text = (Entré * 9 / 5) + 32
    ElseIf cbEntré.SelectedIndex = 1 Then
        txtSortie.Text = (Entré - 32) * 5 / 9
    End If

End Sub

首先,这一行:

Dim Entré As Integer

这是一个32-bit value.

但是现在,下一行尝试创建 64位值:

Convert.ToInt64(txtEntré.Text)

此外,结果没有分配到任何地方,与默认值Entré保持0不变。

可以将Entré更改为使用Long类型,或者将此代码更改为使用Convert.ToInt32()(或者更好的是Integer.TryParse())。

鉴于您要处理温度值,我建议使用后一种方法。我怀疑您是否需要担心温度超过可以用基本整数表示的2+十亿度以上。甚至太阳的核心都没有那么热。您可以将TextBox的MaxLength属性设置为8,以确保安全。

无论哪种方式,请不要忘记将结果分配给变量:

Private Sub txtEntré_TextChanged(sender As Object, e As EventArgs) Handles txtEntré.TextChanged    
    Dim Entré As Integer 
    If Not Integer.TryParse(txtEntré.Text, Entré) Then Exit Sub

    If cbEntré.SelectedIndex = 0 Then
        txtSortie.Text = ((Entré * 9 / 5) + 32).ToString()
    ElseIf cbEntré.SelectedIndex = 1 Then
        txtSortie.Text = ((Entré - 32) * 5 / 9).ToString()
    End If
End Sub

您还应该启用Option Strict。