0

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

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
4

1 回答 1

0

我注意到的是,您正在Char根据从 word_list 返回的随机单词创建一个数组,然后Char使用数组中字符的计数作为 word_list 的索引来遍历数组,如果字符的数量用你的话超过你列表中的单词数量你会得到一个错误,因为这个错误是在FormsLoad 事件中,它会被吞掉,并且它之后的所有代码都将被中止。还有其他一些我想改变的问题,比如确保所有声明都有一个类型,我可能会改用Controls.FindMethod 并检查它是否有一个实际的对象。但我可能首先要做的是将您的代码移动到一个单独的子例程中,并在您IntializeComponent调用 Forms Constructor( 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
于 2013-09-15T00:43:48.197 回答