1

我已经编写了以下代码:

Dim i As Integer
Dim pos As Integer = 0
Dim neg As Integer = 0
Dim zer As Integer = 0
Dim TextBoxes() As String = {Val(TextBox1.Text), Val(TextBox2.Text),
                              Val(TextBox3.Text), Val(TextBox4.Text),
                              Val(TextBox5.Text), Val(TextBox6.Text),
                              Val(TextBox7.Text), Val(TextBox8.Text),
                              Val(TextBox9.Text), Val(TextBox10.Text)}
For i = 0 To 9
    If TextBoxes(i) > 0 Then
        pos += 1
    End If
    If TextBoxes(i) < 0 Then
        neg += 1
    End If
    If TextBoxes(i) = 0 Then
        zer += 1
    End If
Next i
Label4.Text = (pos)
Label5.Text = (neg)
Label6.Text = (zer)

当程序执行并将一些值放入文本框中时,输出如下所示。第一个文本框包含1正数,另一个文本框包含-1负数。它运作良好。

问题出现在这里:程序将空框计数为0并显示8为零的总数。所有其他 8 个文本框都留空。如何解决此问题,使其不将空文本框计为0.

作为参考,这是我之前已经解决的相关问题:Finding String of Substring in VB without using library function

4

1 回答 1

1

问题是您正在调用该Val函数以获取每个文本框中的值。 如果给定文本为空或非数字,则Val返回。0如果要检查,您应该将原始字符串存储在数组中,然后检查循环中的值,如下所示:

Dim i As Integer
Dim pos As Integer = 0
Dim neg As Integer = 0
Dim zer As Integer = 0
Dim TextBoxes() As String = {TextBox1.Text, TextBox2.Text,
                              TextBox3.Text, TextBox4.Text,
                              TextBox5.Text, TextBox6.Text,
                              TextBox7.Text, TextBox8.Text,
                              TextBox9.Text, TextBox10.Text}
For i = 0 To 9
    If TextBoxes(i) <> String.Empty Then
        If Val(TextBoxes(i)) > 0 Then
            pos += 1
        End If
        If Val(TextBoxes(i)) < 0 Then
            neg += 1
        End If
        If Val(TextBoxes(i)) = 0 Then
            zer += 1
        End If
    End If
Next i
Label4.Text = pos.ToString()
Label5.Text = neg.ToString()
Label6.Text = zer.ToString()

但是,该Val功能主要是为了向后兼容 VB6 提供的。它会起作用,但我建议Integer.TryParse改用它。请注意,我还添加ToString了最后三行。正如其他人所提到的,您应该转向Option Strict On.

于 2013-04-10T13:33:21.053 回答