2012-01-18 60 views
0

我似乎在列表框中選定的索引有問題。VB.NET列表框選定索引

該列表框根據用戶選擇插入各種項目。一個例子是:

LiIndex = ListBox1.Items.Count  
ListBox1.Items.Insert(LiIndex, "Item1") 

LiIndex = ListBox1.Items.Count  
ListBox1.Items.Insert(LiIndex, "AND") 

LiIndex = ListBox1.Items.Count  
ListBox1.Items.Insert(LiIndex, "Item2") 

LiIndex = ListBox1.Items.Count  
ListBox1.Items.Insert(LiIndex, "AND") 

LiIndex = ListBox1.Items.Count  
ListBox1.Items.Insert(LiIndex, "Item3") 

這一切工作和顯示沒有問題。我遇到的問題是如果我選擇兩個AND中的第二個。如果我點擊列表中的第二個「AND」,然後點擊一個按鈕來觸發一個方法,那麼所選索引總是第一個「AND」的索引。

Dim listIndex as integer = ListBox1.SelectedIndex 

我不明白爲什麼,列表框本身將始終顯示第二個選定,但行動將發生在第一個。

任何想法,我哪裏去錯了將不勝感激。

+0

您提供的代碼不足以解決您的問題。您將代碼發佈到獲取列表框項目值的地方... – 2012-01-18 11:41:15

+0

根據您向我們顯示的內容,ListBox1.SelectedIndex將顯示_1_表示第一個* AND *和_3_表示第二個* AND *。你一定還有其他事情沒有向我們展示。 – hawbsl 2012-01-18 11:46:03

回答

0

Wathever你想實現的,直接處理ListBox中的項目是不是一個很好的起點時。 您應該使用ObservableList(Of String)作爲代碼的屬性,並綁定xaml中的列表 。
之後,你的代碼變成:MyItemList.Add(「My Item」)
這個問題可能來自在你的代碼中使用SelectedItem或來自你顯示 同一個對象的事實兩次(我有一次奇怪的行爲CheckBox顯示兩次相同的對象) 您可以通過定義/使用類來存儲數據來擺脫該問題:無論如何,它不僅僅是關於字符串的 ,不是?所以你可以有一個帶ToString Overload的ItemInfo類來顯示 或者你的Window資源中有一個DataTemplate,它的ItemInfo類型爲DataType。

<DataTemplate DataType="{x:Type l:ItemInfo}"> 
     <TextBlock Text="{Binding ItemText}" /> 
</DataTemplate> 

,並在你的代碼中使用,現在MyItemList的beeing ObervableList(作者ItemInfo):MyList.Add(新ItemInfo( 「一些文本」,...))
所以你從來沒有兩次相同的項目。

更多的工作,但在這裏我們有更堅實的開始添加數據/功能之後。

+0

感謝您的支持。會看看它,並試圖改變方法。 – JIbber4568 2012-01-24 10:56:06

1

它看起來不錯,但我認爲你正在創建的索引是錯誤的,或許你點擊按鈕或東西時,正在重置或取消選擇列表框...

我這樣做,它的工作,我得到指數= 3選擇第二個「AND」(和一個更清晰的語法)

ListBox1.Items.Insert(ListBox1.Items.Count, "Item1") 
ListBox1.Items.Insert(ListBox1.Items.Count, "AND") 
ListBox1.Items.Insert(ListBox1.Items.Count, "Item2") 
ListBox1.Items.Insert(ListBox1.Items.Count, "AND") 
ListBox1.Items.Insert(ListBox1.Items.Count, "Item3")