2016-08-10 4 views
0

При попытке распечатать отчет в моем проекте vb.net у меня есть код, чтобы проверить, все ли заполненные поля заполнены. Если это не так, появится окно с сообщением для уведомления пользователя. Когда они нажимают «ОК», мне нужна программа, чтобы остановить выполнение кода для загрузки отчета. На данный момент он застревает в бесконечном цикле, где он снова проходит через функцию Try и SELECT CASE.Выбирать Case & Try statement бесконечный цикл

Что нужно изменить, чтобы остановить это? Я не могу работать, в чем проблема, и почему следующие разделы кода продолжают цикл круглый один за другим

Try 
    Select Case checkwhat.ToUpper 
     Case "SUPPLIER" 
      If cmbSuppliers.Text.Trim = "" Then 
       MsgBox("Please select a supplier", MsgBoxStyle.OkOnly, "No Supplier Selected") 
       Return False 
       Exit Try 
      End If 
     Case "RB6B" 
      check("SUPPLIER") 
      If check("SUPPLIER") = True Then Else Exit Sub 
      createWorkTable("SUPPLIERS-TERRITORY-LS") 
      regReport("rTerritoryWTableCrosstabB.rpt", "", con, Me.MdiParent, cReport, True) 
      fillPms(cReport, "Sales by Territory by Supplier", "For " & cmbSuppliers.Text.Trim, "", "AOT02") 
+0

Существует слишком много кода отсутствует. Случай поставщика никогда не возвращает true, и вы пытаетесь выйти из попытки после возврата false. В случае с RB6B вы вызываете чек на «SUPPLIER», который я могу только предположить, это код, который мы смотрим, который является тем же кодом, который никогда не может быть равен true. И тогда вы просто выходите из подкаталога. –

+0

@ ProGrammer Итак, в заявлении Try мне нужно «Else Return True»? – David

ответ

2

Это не полный ответ, но я могу по крайней мере, решить некоторые вопросы:

Select Case checkwhat.ToUpper 
    Case "SUPPLIER" 
     If cmbSuppliers.Text.Trim = "" Then 
      MsgBox("Please select a supplier", MsgBoxStyle.OkOnly, "No Supplier Selected") 
      Return False 
      Exit Try '<- Redundant 
     Else 
      ' Perform other checks 
      Return True 
     End If 

Таким образом, это означает, что вы можете как минимум получить оба возвращаемых значения при условии, что вы введете случай поставщика.

Теперь .. В вашем случае RB6B вы запускаете функцию check дважды.

Case "RB6B"  
    check("SUPPLIER") 
    If check("SUPPLIER") = True Then 

два варианта у вас есть следующие:

Dim supplierValid as Boolean = check("SUPPLIER") 
If supplierValid = True 

Или только удаление первой строки

If check("SUPPLIER") = True Then 

Okay. Так что следующее:

If check("SUPPLIER") = True Then Else Exit Sub

Try и избегать использования этого стиля, так как он может скрыть пути кода и вы можете пропустить некоторые функции, не понимая. Два варианта показаны ниже. Один избегает дополнительно гнездящихся

If check("SUPPLIER") = True Then 
    createWorkTable("SUPPLIERS-TERRITORY-LS") 
    regReport("rTerritoryWTableCrosstabB.rpt", "", con, Me.MdiParent, cReport, True) 
    fillPms(cReport, "Sales by Territory by Supplier", "For " & cmbSuppliers.Text.Trim, "", "AOT02") 
Else 
    Exit Sub 
End If 

Или

If check("SUPPLIER") = False Then 
    Exit Sub 
End If 

createWorkTable("SUPPLIERS-TERRITORY-LS") 
regReport("rTerritoryWTableCrosstabB.rpt", "", con, Me.MdiParent, cReport, True) 
fillPms(cReport, "Sales by Territory by Supplier", "For " & cmbSuppliers.Text.Trim, "", "AOT02") 
+1

Это полностью исправлено, спасибо! – David

+0

Неожиданный, но фантастический :) Нет проблем –