VB.NET List Box Выбранный указатель - PullRequest
0 голосов
/ 18 января 2012

У меня, похоже, проблемы с выбранным индексом в окне списка.

В поле списка вставляются различные элементы в зависимости от выбора пользователя.Примером может быть:

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.Если я щелкну второе «И» в списке, а затем кнопку для запуска метода, выбранный индекс всегда будет индексом первого «И».

Dim listIndex as integer = ListBox1.SelectedIndex

Я не могу понять, почемусамо окно списка всегда будет отображать второе, как выбранное, но действие будет происходить против первого.

Любые идеи о том, где я иду не так, будут с благодарностью.

Ответы [ 2 ]

1 голос
/ 18 января 2012

Это выглядит нормально, но я думаю, что созданный вами индекс неверен, или, возможно, вы переустанавливаете или отменяете выбор списка при нажатии кнопки или что-то в этом роде ...

Я сделал это, и это сработало, яполучить индекс = 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")
0 голосов
/ 21 января 2012

Независимо от того, чего вы хотите достичь, обработка элементов ListBox напрямую не является хорошим началом. Вы должны использовать ObservableList (Of String) в качестве свойства вашего кода и связать список в xaml.
После этого ваш код становится: MyItemList.Add ("My Item")
Проблема может возникнуть из-за использования SelectedItem в вашем коде ИЛИ из-за того, что вы отображаете один и тот же объект дважды (однажды у меня было странное поведение в CheckBox, отображающем дважды один и тот же объект) Вы можете избавиться от этого, определив / используя класс для хранения данных: в любом случае, это не просто насчет строки, нет? так что вы можете иметь класс ItemInfo с перегрузкой ToString для его отображения ИЛИ вы определяете DataTemplate в своем ресурсе Window с ItemInfo как DataType.

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

и в используемом вами коде MyItemList теперь является ObervableList (Of ItemInfo): MyList.Add (New ItemInfo ("некоторый текст", ...))
так что у вас никогда не будет дважды одинакового предмета.

Больше работы, но здесь у нас есть более надежное начало для добавления данных / функций после.

...