Visual Basic - 使用循环更改按钮颜色

时间:2014-02-06 23:10:03

标签: .net vb.net loops user-interface

为了练习,我正在编写一个VB应用程序模拟和电梯系统,在建筑物中有4个电梯和40个楼层 - 当按下按钮时我希望它改变颜色,直到电梯到达那个楼层。

目前,我能想到的唯一方法是通过硬编码检查每个电梯所包含的目的地楼层列表,如果它包含给定的楼层,则更改该按钮的颜色,如下所示: / p>

' button 1
        If elevator1.goingUpList.Contains(1) Or elevator1.goingDownList.Contains(1) Then
            lift1Button1.BackColor = Color.LightGoldenrodYellow
        ElseIf (elevator1.goingUpList.Contains(1) = False) Or (elevator1.goingDownList.Contains(1) = False) Then
            lift1Button1.BackColor = DefaultBackColor
        End If

问题在于,我必须为4个电梯中的每个电梯的每个按钮(总共40个)进行 - 160次必要的960行来完成相当简单的任务。这必须是一种更简单的方法吗?

我在考虑一个通过电梯列表的循环,检索列表中的每个楼层可能是一个更容易的解决方案 - 但我如何获得相应的按钮来改变颜色?

1 个答案:

答案 0 :(得分:1)

是的,您可以使用For Each循环来显示按钮。 Windows窗体具有Controls Collection属性。 ButtonLabelTextBox等所有控件都会添加到Contorls Collection,除非您使用的是PanelGroupBox或其他容器。

For Each中使用Me.Controls循环,所有类型的控件都将通过。因此,您必须使用TypeOf运算符检查控件的类型。

如果您的表单有其他按钮而不是“电梯按钮”,则需要将“电梯按钮”的Tag属性设置为“1”或电梯号码。

以下是示例代码

Dim ctl As Object
Dim elevatorNumber As String
Dim buttonNumber As String

For Each ctl In Me.Controls
    If TypeOf ctl Is Button Then
        elevatorNumber = ctl.Tag
        buttonNumber = ctl.Text

        If elevatorNumber = "1" Then
            If elevator1.goingUpList.Contains(buttonNumber) Or elevator1.goingDownList.Contains(buttonNumber) Then
                ctl.BackColor = Color.LightGoldenrodYellow
            ElseIf (elevator1.goingUpList.Contains(buttonNumber) = False) Or (elevator1.goingDownList.Contains(buttonNumber) = False) Then
                ctl.BackColor = DefaultBackColor
            End If
        End If

    End If
Next