0

我似乎对列表框中的选定索引有问题。

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

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

我不知道为什么,列表框本身总是将第二个显示为选中,但该操作将针对第一个发生。

任何关于我哪里出错的想法将不胜感激。

4

2 回答 2

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")
于 2012-01-18T11:48:15.883 回答
0

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

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

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

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

于 2012-01-21T18:45:36.357 回答