2016-08-10 4 views
0

내 vb.net 프로젝트에서 보고서를 인쇄하려고 할 때 모든 필수 필드가 채워 졌는지 확인하는 코드가 있습니다. 그렇지 않으면 메시지 상자가 나타납니다 사용자에게 알립니다. 'OK'를 누르면 코드를 실행하지 않고 보고서를로드해야합니다. 지금은 무한 루프에 걸려서 Try 함수와 SELECT CASE 함수를 반복적으로 사용합니다.Select Case & Try 문 무한 루프

이 문제를 해결하려면 무엇이 필요합니까? 나는 문제가 무엇인지 작동하지 않을 수 있습니다, 왜 코드의 다음 섹션은 다른

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를 반환 한 후에 try를 종료하려고 시도합니다. RB6B의 경우 "SUPPLIER"에 대한 확인을 호출합니다.이 코드는 우리가보고있는 코드이며, 결코 똑같은 코드는 아닐 수 있습니다. 그리고 나서 하위 메뉴를 종료하십시오. –

+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 

좋아 첫 번째 줄을 제거. 그래서 그 다음이 코드 경로를 숨길 수 있습니다 당신이 실현하지 않고 일부 기능을 놓칠 수 있기 때문에

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

시도하고,이 스타일을 사용하지 마십시오. 아래 두 가지 옵션이 있습니다. 하나가 없습니다 너무 많은 코드가 추가 중첩을

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

예기치 못한 환상이지만 :) 문제 없음 –