为什么Microsoft Visual Basic会跳过此代码的一部分

时间:2013-09-14 23:37:01

标签: vb.net winforms visual-studio

我正在尝试让我的表单上的某些标签可见,但我不想使用很多if语句,但出于某种原因我将Me.Controls(lbl).Visbel = True置于一个for或do循环它会跳过整个循环。代码完全按照我想要的方式运行,直到我为整个类而不是From_load私有子调用Dim lbl = Controls("Label" & counter_3)时出错。有时我可以让它工作,但只有一个标签可见

Dim chararray() As Char = word_list(random_word).ToCharArray
Dim lbl = "Label" & counter_3

    For Each item In chararray
        If item = Nothing Then
        Else
            word_list(counter_2) = item.ToString()
            counter_2 += 1
        End If
    Next

    For Each item In chararray
        If item = Nothing Then

        Else
            counter_3 += 1
            Me.Controls(lbl).Visible = True
            MsgBox(item & " " & counter_3)
        End If
    Next

我也试过了。两个循环都被完全跳过。我知道这是因为MsgBox没有出现。

Dim chararray() As Char = word_list(random_word).ToCharArray
Dim lbl = Controls("Label" & counter_3)

    For Each item In chararray
        If item = Nothing Then
        Else
            word_list(counter_2) = item.ToString()
            counter_2 += 1
        End If
    Next

    For Each item In chararray
        If item = Nothing Then

        Else
            counter_3 += 1
            lbl.Visble = True
            MsgBox(item & " " & counter_3)
        End If
    Next

1 个答案:

答案 0 :(得分:0)

我注意到的是你正在根据word_list中返回的随机单词创建一个Char数组,然后使用该单词中的字符计数遍历Char数组。数组作为word_list的索引,如果单词中的字符数量超过列表中的单词数量,则会出现错误,因为此错误发生在Forms加载事件中,它将被吞下并且所有代码将被中止。还有其他问题我会改变,例如确保所有声明都有一个类型,我可能会使用Controls.Find方法,并检查它是否有实际对象。但我首先要做的是将代码移到单独的子例程中,并在Forms构造函数(IntializeComponent)方法中调用New后调用它。

像这样。

Public Sub New()

    ' This call is required by the designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.

    YourMethod
End Sub


Public Sub YourMethod()
    Dim chararray() As Char = word_list(random_word).ToCharArray
    Dim lbl As Control() = Controls.Find("Label" & counter_3, True)

    For Each item In chararray
        If item = Nothing Then
        Else
            word_list(counter_2) = item.ToString()
            counter_2 += 1
        End If
    Next

    For Each item In chararray
        If item = Nothing Then

        Else
            counter_3 += 1
            If lbl.Length > 0 Then
                lbl(0).Visible = True
            Else
                MsgBox("Control not Found")
            End If
            MsgBox(item & " " & counter_3)
        End If
    Next
End Sub