2017-04-21 97 views
1

我開發了一個vb.net應用程序,並且遇到了組合框的麻煩。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 

而且有結果的輸出,當第二個函數被調用,我沒有相同的selectedIndex:

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

你已經有/解決了這個問題?

問候, 法比安斯基

+0

_initBoxesLocation_的代碼是什麼?看起來,你以某種方式改變了該函數中的SelectedIndex。請編輯您的問題並添加代碼 – Steve

+3

如果您「清除/重新填充組合框」,則選定的項目將被刪除,並且「SelectedIndex」重置爲「-1」 –

+0

實際上,第一項是在索引0處。因此,如果(ComboBoxSite.SelectedIndex <> 0)Then'不會從第二個索引更改爲第一個時通過。這是打算? – djv

回答

0

感謝您的回答!

事實上,Steve和A Friend的問題來自函數initBoxesLocation。 在這個功能中,我清除了4個組合框,然後我在每個框中添加了1個項目。

我沒有真正理解問題出在哪裏。

編輯:是的,當然,一旦我的組合框重新登記,我沒有再次選擇一個項目,所以有這個問題。

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

我分裂initBoxesLocation()函數,通過調用改變一個或取決於組合框的其他復位功能,我需要的其實不是打電話給他們。

現在它的工作!

Regards 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 當前選定項的從零開始的索引。
如果未選擇項目,則返回負值(-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