如何遍历标签控件并测试标签?

时间:2019-07-06 15:33:09

标签: vb.net testing controls iteration

在我的表单上,我有一个带有12个标签页的tabcontrol。 每个标签页包含许多标签。 它们中的72个在其.text属性中包含数字数据,这些属性可以是"0""""x",其中x是作为字符串的数字数据值。 页面上的其余标签用于格式化...即backcolor = color.black并用作线形。那些标签.text""

现在,为了使我的应用程序按预期运行,在加载时,表单会插入并填充这些标签。

以下是理解我为什么这样做的关键: 标签A B C的.textchanged属性触发数学函数并将结果返回到 标签D EF。 和 标签D E F的.textchanged属性触发数学函数并将结果返回到 标签G H I。

数学是除法的,因此,如果尚未填充所有标签并且触发.textchanged事件,则数学将导致被零除的错误。

因此,我在每个函数if iAmLoaded = true上设置一个标志,以仅在表单完成标签填充后才触发。

现在,一旦表单加载完毕,并且所有值都重新填充到标签中……我需要在.textchanged属性<> {{1} }或<> .text

我的想法是将每个包含一个值的标签中的值迭代1,然后从中减去1。

"0"

2 个答案:

答案 0 :(得分:0)

谢谢史蒂夫... 答案:

    iAmLoaded = True
    Dim i = 0

    Do While i <> 12
        For Each LabelOnTheForm As Label In TabControl1.TabPages(i).Controls.OfType(Of Label)()

            If DirectCast(LabelOnTheForm, Label).Text <> "" And DirectCast(LabelOnTheForm, Label).Text <> "0" Then
                DirectCast(LabelOnTheForm, Label).Text = (Convert.ToDouble(DirectCast(LabelOnTheForm, Label).Text) + 1).ToString
                DirectCast(LabelOnTheForm, Label).Text = (Convert.ToDouble(DirectCast(LabelOnTheForm, Label).Text) - 1).ToString
            End If

        Next

        i = i + 1

    Loop

答案 1 :(得分:0)

使用汉斯建议进行简化:

    iAmLoaded = True
    Dim i = 0
    Dim test As String
    Do While i <> 12
        For Each LabelOnTheForm As Label In TabControl1.TabPages(i).Controls.OfType(Of Label)()
            Dim lbl = DirectCast(LabelOnTheForm, Label)
            test = NumFormat(lbl.Text)
            If test = lbl.Text And
                    lbl.Text <> "" And lbl.Text <> "0" Then
                lbl.Text = (Convert.ToDouble(lbl.Text) + 1).ToString
                lbl.Text = (Convert.ToDouble(lbl.Text) - 1).ToString
            End If

        Next
        i = i + 1
    Loop
End Sub

现在的问题是我回到了第一广场: 一旦标签加载了它们的值...上面的代码将迭代并从每个值中减去一个以触发.textchanged事件,但是由于它是随机抽取标签的,因此它更新了其中一个标签在我的逻辑中需要来自先前标签的数据,但是上面示例中的for循环是随机抽取标签。 我有办法为它定下从表格上拉标签的命令吗?