.NET: блюз ListView? - PullRequest
       7

.NET: блюз ListView?

4 голосов
/ 11 февраля 2009

Количество выборок, .SelectedItems.Count, не изменяется при свойство Selected имеет значение true для элемента в Items Коллекция ListView.

Пример:

  lvPept.SelectedItems.Clear()
  lvPept.Items(6).Selected = True
  Dim newLen As Integer = lvPept.SelectedItems.Count

lvPept является ListView и содержит 10 элементов.

newLen ожидается равным 1, но 0 при возникновении проблемы и событие SelectedIndexChanged не сработало. С другие наборы данных это 1, как ожидалось, и Событие SelectedIndexChanged наступило.

При каких обстоятельствах или в каком состоянии lvPept может находиться в чтобы это случилось? BeginUpdate () / EndUpdate () - это , а не используется с lvPept.

Справочная информация:

Я пытаюсь отследить проблему одного из пользователей моего .NET-приложение с открытым исходным кодом, MSQuant (http://msquant.sourceforge.net/), обнаружено.

У меня кончились идеи о том, что может быть причиной этого проблема.

Проблема воспроизводима, и я могу воспроизвести ее в моем среда разработки, Visual Studio 2008. Кажется, не зависит от версии Windows (Windows 2000 / Windows XP 32 бит / Windows XP (64-разрядная версия), версия среды выполнения .NET (2.0 / 3.5) и Visual Студийная версия (2005/2008).

Другой контекст: приложение написано на VB.NET и в C # и является приложением Windows Forms. Исходный код для класс находится на http://shrinkster.com/14bg. класс формы, в котором находится ListView, был изначально сгенерирован одной из ранних официальных версий Visual Studio, которая поддерживается .NET, ок. 2002

Обновление 1: поскольку у меня есть и рабочий, и сломанный корпус, я сравнили содержание lvPept. Единственная разница за исключением свойств "Handle", "MousePosition" и "TopItem" (так как это другой белок с разными пептидами) является свойством «Создан». Это было Неверно для разбитого дела. Это имеет смысл что частично построенный объект не может функционировать должным образом, но как это может произойти?

Обновление 2: свойство «Создано», являющееся ложным, оказалось хорошее лидерство. Я думаю, что реальная проблема заключалась в том, чтобы сделать это в конструкция время, а не форма загрузки время. теперь у меня есть добавлены АСПЕРТЫ для свойства "Создано", переработаны и изменены все операции происходят во время загрузки формы. Теперь работает как и ожидалось, и пользователь с проблемой получил новый версия приложения.

Старый плохой путь был там с тех пор, как приложение начало в 2002 году. Мне просто интересно, если бы некоторые эксперты могли пролить свет на то, почему это работает в 99,9% случаев и только потерпел неудачу в нескольких случаях и воспроизводимо так.

Ответы [ 2 ]

1 голос
/ 11 февраля 2009

Это интересно.

Единственное, что я думаю, могло бы сделать это, если бы ListView не осознавал, что ListItem изменил свое значение "Selected" и поэтому не обновляет свои выбранные коллекции элементов.

Свойство .SelectedItems не обязательно генерируется каждый раз, когда вы получаете свойство - если вы отражаете сборку System.Windows.Forms:

    if (this.selectedListViewItemCollection == null)
    {
        this.selectedListViewItemCollection = new SelectedListViewItemCollection(this);
    }
    return this.selectedListViewItemCollection;

Так что я склонен думать, что вы получаете устаревшую версию selectedListViewItemCollection.

Я бы попробовал вместо изменения свойства Selected на уровне Item, попробуйте вместо этого добавить выбранный индекс в свойство .SelectedIndices ListView и посмотреть, работает ли это. Таким образом, ListView не полагается на получение изменения ListViewItem.

0 голосов
/ 11 февраля 2009

Полагаю, вам также нужно вызвать ListView.Select (), чтобы вызвать событие SelectedIndexChanged.

lvPept.SelectedItems.Clear()
lvPept.Items(6).Selected = True
lvPept.Select()
Dim newLen As Integer = lvPept.SelectedItems.Count
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...