VB.NET列表框选择索引

时间:2012-01-18 11:36:41

标签: asp.net vb.net listbox selectedindex

我似乎在列表框中遇到选定索引的问题。

列表框根据用户选择插入了各种项目。一个例子是:

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

我无法理解为什么,列表框本身将始终显示第二个选中,但操作将针对第一个进行。

对于我出错的地方的任何想法都将不胜感激。

2 个答案:

答案 0 :(得分:1)

它看起来不错,但我认为您创建的索引是错误的,或者您可能在单击按钮或其他内容时重置或取消选择列表框...

我做了这个并且它有效,我在选择第二个“AND”时得到index = 3(并且使用更清晰的语法)

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")

答案 1 :(得分:0)

您希望实现的Wathever,直接处理ListBox项目不是一个好的起点。 您应该使用ObservableList(Of String)作为代码的属性并绑定列表 在xaml。
之后,您的代码变为:MyItemList.Add(“My Item”)
问题可能来自在您的代码中使用SelectedItem或您正在显示的事实 同一个对象两次(我曾经在一个显示两次相同对象的CheckBox中有一个奇怪的行为) 你可以通过定义/使用类来存储数据来摆脱它:无论如何,它不仅仅是 关于一个字符串,不是吗?所以你可以有一个带有ToString Overload的ItemInfo类来显示它 或者在Window资源中定义一个DataInmplate,其中ItemInfo为DataType。

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

在你使用的代码中,MyItemList现在是一个ObervableList(Of ItemInfo):MyList.Add(New ItemInfo(“some text”,...))
所以你永远不会有两次相同的项目。

更多工作,但在这里我们有更坚实的开始添加数据/功能。