【问题标题】:Choosing which for loop based on If boolean condition根据 If 布尔条件选择哪个 for 循环
【发布时间】:2021-02-17 09:10:42
【问题描述】:

我有一个布尔标志。基于此标志为假或真,我的应用程序应该转到相应的 for 循环。循环完全相同,除了如果为假,我只想循环 i/j = 1-2。如果为真,我想循环 i/j = 1-3。也许有比创建标志更有效的方法,但是,我在第二个循环的结构上遇到错误。

  Dim Ti(0 To 3) As String
  Ti(1) = "Temperature"
  Ti(2) = "Outside Temperature"
  Ti(3) = "Inside Temperature"

  Dim Tj(0 To 3) As String
  Tj(1) = "Temperature"
  Tj(2) = "Outside Temperature"
  Tj(3) = "Inside Temperature"

  Flag1 = 0
  Flag2 = 0
  TCSflag = 0

  If onlyflag = False Then
            For i = 1 To 2
                TCChannel = Me.Controls.Item("TCSDropDown" & i).Text
                If TCChannel = "Not Available" Then
                ElseIf TCChannel = "Select Temp" Then
                    TCSflag = TCSflag + 1
                    MsgBox("Please select a temp for" & " " & Ti(i), vbCritical, "Error")
                    Exit For
                Else
                    If InStr(1, TCChannel, "Type 1") Then
                        Flag1 = 1
                    End If
                    If InStr(1, TCChannel, "Type 2") Then
                        Flag2 = 1
                    End If

                    For j = 1 To 2

                        If Ti(i) <> Tj(j) Then
                            TCChannel1 = Me.Controls.Item("TCSDropDown" & j).Text
                            If TCChannel1 = "Not Available" Then
                            Else
                                If TCChannel = TCChannel1 Then
                                    MsgBox("You selected the same temp for both " & Ti(i) & " and " & Tj(j), vbCritical, "Conflicting Temp Selection!")
                                    TCSflag = TCSflag + 1
                                    Exit For
                                End If
                            End If
                        End If
                    Next

                    If TCSflag >= 1 Then
                        Exit For
                    End If
                End If
            Next

        Else onlyflag = True
            For i = 1 To 3
            TCChannel = Me.Controls.Item("TCSDropDown" & i).Text
            If TCChannel = "Not Available" Then
                ElseIf TCChannel = "Select Temp" Then
                    TCSflag = TCSflag + 1
                    MsgBox("Please select a temp for" & " " & Ti(i), vbCritical, "Error")
                Exit For
            Else
                    If InStr(1, TCChannel, "Type 1") Then
                        Flag1 = 1
                    End If
                    If InStr(1, TCChannel, "Type 2") Then
                        Flag2 = 1
                    End If

                    For j = 1 To 3

                    If Ti(i) <> Tj(j) Then
                        TCChannel1 = Me.Controls.Item("TCSDropDown" & j).Text
                        If TCChannel1 = "Not Available" Then
                        Else
                            If TCChannel = TCChannel1 Then
                                MsgBox("You selected the same temp for both " & Ti(i) & " and " & Tj(j), vbCritical, "Conflicting Temp Selection!")
                                TCSflag = TCSflag + 1
                                Exit For
                            End If
                        End If
                    End If
                Next

                    If TCSflag >= 1 Then
                    Exit For
                End If
                End If
                End If
        Next

【问题讨论】:

  • 我在粘贴的代码中看到错误的是Else onlyflag = True;也许您的意思是让onlyflag = True 部分出现在评论中?我不认为它会像介绍的那样编译。 (接受的答案是比修复它更好的选择。)

标签: vb.net for-loop if-statement


【解决方案1】:

为什么不根据你的真假设置一个循环次数的变量?

 Dim Ti(0 To 3) As String
  Ti(1) = "Temperature"
  Ti(2) = "Outside Temperature"
  Ti(3) = "Inside Temperature"

  Dim Tj(0 To 3) As String
  Tj(1) = "Temperature"
  Tj(2) = "Outside Temperature"
  Tj(3) = "Inside Temperature"

  Flag1 = 0
  Flag2 = 0
  TCSflag = 0
  upperLimit = 3
  If onlyflag = False Then
     upperLimit = 2
  EndIf

            For i = 1 To upperLimit
                TCChannel = Me.Controls.Item("TCSDropDown" & i).Text
                If TCChannel = "Not Available" Then
                ElseIf TCChannel = "Select Temp" Then
                    TCSflag = TCSflag + 1
                    MsgBox("Please select a temp for" & " " & Ti(i), vbCritical, "Error")
                    Exit For
                Else
                    If InStr(1, TCChannel, "Type 1") Then
                        Flag1 = 1
                    End If
                    If InStr(1, TCChannel, "Type 2") Then
                        Flag2 = 1
                    End If

                    For j = 1 To upperLimit

                        If Ti(i) <> Tj(j) Then
                            TCChannel1 = Me.Controls.Item("TCSDropDown" & j).Text
                            If TCChannel1 = "Not Available" Then
                            Else
                                If TCChannel = TCChannel1 Then
                                    MsgBox("You selected the same temp for both " & Ti(i) & " and " & Tj(j), vbCritical, "Conflicting Temp Selection!")
                                    TCSflag = TCSflag + 1
                                    Exit For
                                End If
                            End If
                        End If
                    Next

                    If TCSflag >= 1 Then
                        Exit For
                    End If
                End If
            Next

【讨论】:

  • 上限完美运行。谢谢,我想有一个更有效的方法,还在学习中。
猜你喜欢
  • 2016-08-19
  • 1970-01-01
  • 2019-02-23
  • 2022-06-22
  • 2020-01-11
  • 2018-06-10
  • 2012-08-18
  • 1970-01-01
相关资源
最近更新 更多