我正在尝试让我的表单上的某些标签可见,但我不想使用很多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
答案 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