我正在尝试为此做一个循环,这就是我所做的,但它不起作用

I'm trying to do a loop for this and this is what I did, but it will not work

当组合框项目为 0 时,我想将所有标签、复选框和组合框设置为 Enabled

    For i = 1 To 5
        Dim MycbmQty As ComboBox = CType(Me.Controls("cbmQty" & i), ComboBox)
        Dim myLabel As Label = CType(Me.Controls("lblSumname" & i), Label)
        Dim MybtnSum As Button = CType(Me.Controls("btnSum" & i), Button)
        Dim myLabel2 As Label = CType(Me.Controls("lblSumPrice" & i), Label)
        Dim myLabel3 As Label = CType(Me.Controls("lblPriceTit" & i), Label)
        Dim myLabel4 As Label = CType(Me.Controls("lblQtyTit" & i), Label)
        Dim mychkname As CheckBox = CType(Me.Controls("chkName" & i), CheckBox)

        If MycbmQty.SelectedIndex = 0 Then
            myLabel.Enabled = False
            MybtnSum.Enabled = False
            myLabel2.Enabled = False
            myLabel3.Enabled = False
            myLabel4.Enabled = False
            mychkname.Checked = False
            MycbmQty.Enabled = False
        End If
    Next

但是,如果我改为这样做,它将起作用。

 Private Sub cbmQty1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbmQty1.SelectedIndexChanged
    
    If cbmQty1.SelectedIndex = 0 Then
        lblSumName1.Enabled = False
        btnSum1.Enabled = False
        lblSumPrice1.Enabled = False
        lblPriceTit1.Enabled = False
        lblQtyTit1.Enabled = False
        cbmQty1.Enabled = False
        chkName1.Checked = False
    End If

   
End Sub



Private Sub cbmQty2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbmQty2.SelectedIndexChanged
  
    If cbmQty2.SelectedIndex = 0 Then
        lblSumName2.Enabled = False
        btnSum2.Enabled = False
        lblSumPrice2.Enabled = False
        lblPriceTit2.Enabled = False
        lblQtyTit2.Enabled = False
        cbmQty2.Enabled = False
        chkName2.Checked = False
    End If


End Sub

Private Sub cbmQty3_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbmQty3.SelectedIndexChanged
   
    If cbmQty3.SelectedIndex = 0 Then
        lblSumName3.Enabled = False
        btnSum3.Enabled = False
        lblSumPrice3.Enabled = False
        lblPriceTit3.Enabled = False
        lblQtyTit3.Enabled = False
        cbmQty3.Enabled = False
        chkName3.Checked = False
    End If


End Sub

Private Sub cbmQty4_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbmQty4.SelectedIndexChanged
    
    If cbmQty4.SelectedIndex = 0 Then
        lblSumName4.Enabled = False
        btnSum4.Enabled = False
        lblSumPrice4.Enabled = False
        lblPriceTit4.Enabled = False
        lblQtyTit4.Enabled = False
        cbmQty4.Enabled = False
        chkName4.Checked = False
    End If


End Sub

Private Sub cbmQty5_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbmQty5.SelectedIndexChanged
   
    If cbmQty5.SelectedIndex = 0 Then
        lblSumName5.Enabled = False
        btnSum5.Enabled = False
        lblSumPrice5.Enabled = False
        lblPriceTit5.Enabled = False
        lblQtyTit5.Enabled = False
        cbmQty5.Enabled = False
        chkName5.Checked = False
    End If


End Sub

您没有捕获 Change 事件,而是在循环中查询实际状态。

目标是 AddHandler 行。

Sub main


   For i = 1 To 5
        Dim MycbmQty As ComboBox = CType(Me.Controls("cbmQty" & i), ComboBox)
        Dim myLabel As Label = CType(Me.Controls("lblSumname" & i), Label)
        Dim MybtnSum As Button = CType(Me.Controls("btnSum" & i), Button)
        Dim myLabel2 As Label = CType(Me.Controls("lblSumPrice" & i), Label)
        Dim myLabel3 As Label = CType(Me.Controls("lblPriceTit" & i), Label)
        Dim myLabel4 As Label = CType(Me.Controls("lblQtyTit" & i), Label)
        Dim mychkname As CheckBox = CType(Me.Controls("chkName" & i), CheckBox)


         AddHandler MycbmQty.SelectedIndexChanged, 
                   Sub()
                      If MycbmQty.SelectedIndex = 0 Then
                        lblSumName2.Enabled = False
                        btnSum2.Enabled = False
                        lblSumPrice2.Enabled = False
                        lblPriceTit2.Enabled = False
                        lblQtyTit2.Enabled = False
                        cbmQty2.Enabled = False
                        chkName2.Checked = False
                      End If
                   End Sub                                                       
    Next
end sub