根据按钮名称

时间:2015-07-27 06:36:54

标签: vb.net visual-studio-2013

我目前正在编写实验室称重程序。 在我的表格上有一个42个位置的网格(7行6个样本= 1个机架),每个位置是一个按钮,名称为" Buttonxx" (其中xx代表位置编号,例如Button01,Button02,...,Button42)

所有信息都来自Oracle数据库,通过SQL。

我想根据SQL返回的一条信息更改特定按钮的Backcolor,即是否必须对该样本进行权衡(ToDo =" Y"或&#34 ; N")用于某个实验室分析(=" TitrType"代码中)

E.g。在下面的代码中,如果对于某个机架,只需要对TAN(= analysis / TitrType)的位置23(ToDo =" Y")进行权衡,那么只有该按钮的背景颜色(" Button23")应更改为LightSkyBlue

我从SQL中获取了正确的信息,并且能够将虚拟按钮的名称更改为ToDo的位置名称:DummyBtn.Name =" Button23"

但Backcolor因某种原因没有改变。

p.s。:我只是新手程序员,所以如果需要,请随时索取更多代码或信息。

Public Sub PrFillSampleGrid(TitrType As String, ByRef RS As System.Data.DataSet)
        Dim Pos As Integer = 0
        Dim TODO As String = ""

           For x = 0 To RS.Tables("test").Rows.Count - 1
            Pos = RS.Tables("test").Rows(x).Item("SERIESPOS")
            TODO = RS.Tables("test").Rows(x).Item("TODO")   
            For y = 1 To 42
                Dim DummyBtn As New Button
                Select Case TODO.ToUpper
                    Case TODO = "YES", "Y"

                        If y = Pos Then
                            DummyBtn.Name = "Button" & y
                            Select Case TitrType
                                Case Is = "AcIn"
                                    DummyBtn.BackColor = Color.Orange
                                Case Is = "TAN"
                                    DummyBtn.BackColor = Color.LightSkyBlue
                                Case Is = "TBN"
                                    DummyBtn.BackColor = Color.Crimson
                                Case Is = "TBN2"
                                    DummyBtn.BackColor = Color.Yellow
                            End Select
                        End If
                    Case TODO = "NO", "N"
                        DummyBtn.BackColor = SystemColors.Control
                End Select
            Next y
        Next x
    End Sub

3 个答案:

答案 0 :(得分:1)

尝试这样做:

Public Sub PrFillSampleGrid(TitrType As String, ByRef RS As System.Data.DataSet)
    For x = 0 To RS.Tables("test").Rows.Count - 1
        Dim Pos = CInt(RS.Tables("test").Rows(x).Item("SERIESPOS"))
        Dim TODO = CStr(RS.Tables("test").Rows(x).Item("TODO"))
        For y = 1 To 42
            For Each DummyBtn In Me.Controls.Find("Button" & y.ToString(), True).OfType(Of Button)()
                Select Case TODO.ToUpper
                    Case "YES", "Y"
                        If y = Pos Then
                            Select Case TitrType
                                Case Is = "AcIn"
                                    DummyBtn.BackColor = Color.Orange
                                Case Is = "TAN"
                                    DummyBtn.BackColor = Color.LightSkyBlue
                                Case Is = "TBN"
                                    DummyBtn.BackColor = Color.Crimson
                                Case Is = "TBN2"
                                    DummyBtn.BackColor = Color.Yellow
                            End Select
                        End If
                    Case "NO", "N"
                        DummyBtn.BackColor = SystemColors.Control
                End Select
            Next
        Next y
    Next x
End Sub

我所做的关键更改是For Each DummyBtn In Me.Controls.Find("Button" & y.ToString(), True).OfType(Of Button)()行。这会在表单上搜索名为"Button" & y的现有按钮,并将现有按钮分配给DummyBtn

我做的另一件事是将Option Strict On放在代码的顶部。这立即突出显示了我修复的代码中的一堆其他错误。

建议始终使用Option Strict On,因为它将VB置于严格的打字模式,并且将消除许多错误。您的行Case TODO = "YES", "Y"是代码的示例,可能看起来是正确的,但事实并非如此。这是Case "True", "Y"Case "False", "Y"Option Strict Off的评估。

答案 1 :(得分:0)

您的Select / Case声明存在问题。您不需要Is =,因为这意味着您拥有对象并且您正在测试相等性。您正在测试的值是StringValue Type},这是一个直接比较。

只需使用: -

Select Case TitrType
  Case "AcIn"
    DummyBtn.BackColor = Color.Orange
  Case "TAN"
    DummyBtn.BackColor = Color.LightSkyBlue
  Case = "TBN"
    DummyBtn.BackColor = Color.Crimson
  Case = "TBN2"
    DummyBtn.BackColor = Color.Yellow
End Select

答案 2 :(得分:0)

如果您使用按钮的类级别声明,则DummyBtn永远不会与它们“连接”。

在分配BackColor

之前,您需要执行以下操作
'Get a handle to the actual button
DummyBtn = CType(Me.ContainerName.Controls("Button" & y), Button)

Dim DummyBtn As New Button移到For y循环之上并将其替换为: -

Dim DummyBtn As Button