2012-01-18 58 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")