2013-11-27 1 views
-1

내가 무엇을 믿는 데 것은 내가 볼 수있는 간단한 수정 간단한 문제가 끝납니다. 사용자가 선택 항목에 대해 여러 확인란을 선택하는 양식이 있습니다. Checkbox SelectionVb.net 선택 문은 ubruptly

하면 사용자가 내가 번호 (1-12) 사용되는 보유 할 배열을 제출 버튼을 누른다. 내 배열은 모듈에 저장됩니다. 여기

Module MyVariables 

    Public NumbersUsing(11) As Integer 

End Module 

내 선택 한 Statment의 코드, 나는 단순하고 곤란에 대한 repitious 부분을 잘라거야.

Private Sub SubmitBtn_Click(sender As Object, e As EventArgs) _ 
     Handles SubmitBtn.Click 

Select Case True 
    Case CheckBox1.Checked 
     For i As Integer = 0 To 11 
      If NumbersUsing(i) = Nothing Then 
       NumbersUsing(i) = 1 
       Exit For 
      Else 
       i += 1 
      End If 
     Next 

    Case CheckBox2.Checked 
     For i As Integer = 0 To 11 
      If NumbersUsing(i) = Nothing Then 
       NumbersUsing(i) = 2 
       Exit For 
      Else 
       i += 1 
      End If 
     Next 

    Case CheckBox3.Checked 
     For i As Integer = 0 To 11 
      If NumbersUsing(i) = Nothing Then 
       NumbersUsing(i) = 3 
       Exit For 
      Else 
       i += 1 
      End If 
     Next 
... 

    End Select 

    For i = 0 To 11 
     MessageBox.Show(NumbersUsing(i)) 'To test which numbers have been entered. 
     i += 1 
    Next 

End Sub 

메시지 상자에있는 모든 항목은 기본적으로 1과 0이며 첫 번째 사례 문 검토를 통과하지 않습니다. 첫 번째 문을 제외하고 다른 문은 모두 검사하지 않습니다. 왜 이렇게하는지 모르겠습니다.

도움을 주시면 대단히 감사하겠습니다. 첫 번째 Case CheckBox1.Checked가 true 인 경우

+0

당신이 모든 루프가 수행 할 작업을 나에게 명확하지 않다; Select Case 문은 배타적입니다. 첫 번째 조건이 충족되면 '그렇다면 else else then then ...'과 같이 다음 문항이 분석되지 않습니다. 당신이 원하는 것을 정확히 설명해 주시겠습니까? – varocarbas

+0

'Else ... i + = 1'은 각 루프가 몇 번 반복되는지를 trunate합니다. 그것을 제거. 또한 각 사례에 대한 EXIT는 첫 번째 배열 색인 만 설정되었음을 의미합니다 (아무 것도 아닌 경우) – Plutonix

+0

그게 내가 생각한 것입니다. 그러나 나는 완전히 확신하지 못했습니다. 개별 if 문이 필요하다고 가정합니다. 각 확인란을 살펴 보려고합니다. 체크 박스가 체크되어 있으면 그 체크 박스와 관련된 값을 배열의 가장 빠른 인덱스로 설정합니다. –

답변

3

Case의 나머지는 실행되지 않습니다. the documentation for Select...Case statements에서 :

testexpression하다면 어떤 케이스를expressionlist 절, 케이스 문은 다음 케이스, 그렇지 케이스, 또는 종료를 선택까지 실행하는 것이 다음 문을 일치 성명서. 그런 다음 제어가 최종 선택 다음의 명령문으로 전달됩니다.

0

목록은 아마 더 나은 여기에 작동합니다. 이 같은 도움이된다면보기 :

Dim NumbersUsing As New List(Of Integer) 
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    'I assumed you're using a GroupBox to hold the checkboxes 
    For Each cb As CheckBox In GroupBox1.Controls.OfType(Of CheckBox)() 
     If cb.Checked Then 
      'As long as all the checkboxes are in the pattern you've shown _ 
      'SubString(8) will isolate the index of the checkboxes 
      Dim index As Integer = Integer.Parse(cb.Name.Substring(8)) 
      NumbersUsing.Add(index) 
     End If 
    Next 
End Sub