2017-04-21 46 views
1

나는 vb.net 응용 프로그램을 개발하고 있으며 나는 comboboxes에 문제가 있습니다. Visual Basic ComboBox.SelectedIndex

나는 내 콤보 상자에서 선택한 항목이 변경 될 때 알이 있습니다

Private Sub ComboBoxSite_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBoxSite.SelectedIndexChanged 
    If (ComboBoxSite.SelectedIndex <> 0) Then 'If it is not the default value 
     Console.WriteLine("ActionListenerIndex = {0}", ComboBoxSite.SelectedIndex) 'To debug 
     RequestAccesv2(0) 
    End If 
End Sub 

그리고 RequestAccessv2() 함수

Private Sub RequestAccesv2(taille As Integer) 
    initBoxesLocation() 'A function that clear/refill 4 comboBoxes 
    Console.WriteLine("SELECTED INDEX SITE : {0}", ComboBoxSite.SelectedIndex) 
     Select Case taille 
      Case 0 ..... 'Some database treatment 

End Sub 

을 그리고 결과는 출력에있을 때 두 번째 함수가 호출됩니다. 동일한 선택 인덱스가 없습니다. 인덱스 :

ActionListenerIndex = 2 
SELECTED INDEX SITE : -1 'Does it means thas nothing is selected ? 

이 문제가 있었나요?

감사 의 Fabien

+0

_initBoxesLocation_의 코드는 무엇입니까? 해당 함수에서 SelectedIndex를 어떤 방식으로 변경하는 것으로 보입니다. 해당 코드를 추가하여 질문을 편집하십시오 – Steve

+3

"선택/제거 콤보 박스"를 선택한 경우 선택한 항목이 제거되고'SelectedIndex'가'-1'로 재설정됩니다 –

+0

실제로 첫 번째 항목은 인덱스 0에 있습니다. If (ComboBoxSite.SelectedIndex <> 0) Then'는 두 번째 인덱스에서 첫 번째 인덱스로 변경할 때 전달하지 않습니다. 이게 의도 된거야? – djv

답변

0

답변 해 주셔서 감사합니다.

실제로 Steve와 A Friend는 initBoxesLocation 함수에서 문제가 발생했습니다. 이 fuction에서 나는 4 개의 comboboxes를 지우고 있었다, 그리고 나는 각각에 1 개의 항목을 더했다.

나는 어디에서 문제가 발생하는지 정확히 알지 못했다.

편집 : 예, 물론 한 번 내 콤보 상자를 다시 작성했습니다. 다시 항목을 선택하지 않았으므로 문제가 있습니다.

Private Sub initBoxesLocation() 
    Console.WriteLine("initialisation entete") 
    initBoxEnteteSite() 
    initBoxEnteteBuilding() 
    initBoxEnteteModule() 
    initBoxEnteteRoom() 
End Sub 

은 내가 그들 모두를 호출 실제로 필요한 변경 하나 또는 콤보 상자에 따라서 다른 리셋 기능을 호출하여 initBoxesLocation() 함수를 분할합니다.

이제 작동합니다!

감사합니다. Fabien

0

데이터 인덱스가 음수이다. 인덱스 -1은 선택 항목 없음을 나타냅니다. 유효한 색인이 선택되었을 때 찾고 있으면 0 이상을 확인하십시오.

Private Sub ComboBoxSite_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBoxSite.SelectedIndexChanged 
    If (ComboBoxSite.SelectedIndex >= 0) Then 'If it is not the default value 
     Console.WriteLine("ActionListenerIndex = {0}", ComboBoxSite.SelectedIndex) 'To debug 
     RequestAccesv2(0) 
    End If 
End Sub 

참조 MSDN : https://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.selectedindex(v=vs.110).aspx

ComboBox.SelectedIndex 재산권

속성 값
유형 : 선택 System.Int32 현재 선택된 항목의 인덱스 (0부터 시작)입니다.
항목을 선택하지 않으면 음수 값 (-1)이 반환됩니다.

이제 첫 번째 값을 무시한 다음 ComboBoxSite.SelectedIndex >= 1을 사용할 수 있습니다. 그러나 사용자가 두 번째를 선택한 다음 첫 번째를 여전히 무시하려고합니까?

0

항목을 선택하지 않으면 -1이 반환됩니다. 이것은 일반적으로 검사되는 것입니다 :

Private Sub ComboBoxSite_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBoxSite.SelectedIndexChanged 
    If (ComboBoxSite.SelectedIndex <> -1) Then ' If something is selected 
     Console.WriteLine("ActionListenerIndex = {0}", ComboBoxSite.SelectedIndex) 'To debug 
     RequestAccesv2(0) 
    End If 
End Sub 

당신이 선택하지 않아야합니다 첫 번째 슬롯에 값이있는 경우, 당신은 대신> = 1 확인 확인할 수 있습니다

Private Sub ComboBoxSite_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBoxSite.SelectedIndexChanged 
    If (ComboBoxSite.SelectedIndex >= 1) Then ' If it is not the default value at index 0 (zero), and something is selected 
     Console.WriteLine("ActionListenerIndex = {0}", ComboBoxSite.SelectedIndex) 'To debug 
     RequestAccesv2(0) 
    End If 
End Sub