Множественный выбор Listview

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

5
задан Evan 17 September 2008 в 14:40
поделиться

5 ответов

Это не стандартное поведение управления ListView, даже когда MultiSelect имеет значение true.

Если бы Вы хотели создать свое собственное управление, то необходимо было бы сделать следующее:

  1. Получите управление из ListView
  2. добавьте обработчик к событию "Selected".
  3. В "OnSelected" ведите свой собственный список выбранных пунктов.
  4. Если недавно выбранный пункт не находится в Вашем списке, добавьте его. Если это, удалите его.
  5. В коде выберите все объекты в Вашем списке.

Должно быть достаточно просто реализовать и чувствовать себя подобно мультивыбору, не используя клавишу CTRL!

4
ответ дан 14 December 2019 в 04:51
поделиться

Вы могли бы хотеть также рассмотреть использование Флажков на представлении списка. Это - очевидный способ передать мультиизбранное понятие Вашему среднему пользователю, который не может знать о Ctrl+Click.

От страницы MSDN:

Свойство CheckBoxes предлагает способ выбрать несколько объектов в управлении ListView, не используя клавишу CTRL. В зависимости от Вашего приложения, с помощью флажков для выбора объектов, а не стандартного метода множественного выбора может быть легче для пользователя. Даже если свойство MultiSelect управления ListView имеет значение false, можно все еще отобразить флажки и предоставить возможности множественного выбора пользователю. Эта функция может быть полезной, если Вы не хотите, чтобы несколько объектов были выбраны, и все же хотят позволить пользователю выбирать несколько объектов из списка для выполнения операции в рамках приложения.

2
ответ дан 14 December 2019 в 04:51
поделиться

Выполните развертку через ListviewItemCollection, и можно установить свойство Selected для отдельных объектов к истинному. Это, я верю, будет эмулировать "мультиизбранную" функцию, которую Вы пытаетесь воспроизвести. (Кроме того, как вышеупомянутый комментатор упомянул, убедиться иметь свойство MultiSelect набора lisetview к истинному.)

0
ответ дан 14 December 2019 в 04:51
поделиться

Поведение Ctrl+Click как реализовано браузером и имеет мало общего с фактическим Управлением.NET. Результат, которого Вы пытаетесь достигнуть, может быть получен с большим количеством дополнительного JavaScript - самый легкий путь состоял бы в том, чтобы, вероятно, создать управление JavaScript из значения по умолчанию, которое прокладывает себе путь, вместо того, чтобы пытаться изрубить listview. Это было бы желательно? В этом случае я мог изучить его и возвратиться к Вам с решением.

-2
ответ дан 14 December 2019 в 04:51
поделиться

Вот полное решение, которое я использовал для решения этой проблемы с помощью WndProc. По сути, он выполняет проверку нажатия при щелчке мышью ... затем, если MutliSelect включен, он автоматически включает / выключает элемент [.Selected] и не беспокоится о поддержании каких-либо других списков или возня с функциональностью ListView.

Я не тестировал это во всех сценариях, ... у меня это сработало. YMMV.

public class MultiSelectNoCTRLKeyListView : ListView {
  public MultiSelectNoCTRLKeyListView() {

  }

  public const int WM_LBUTTONDOWN = 0x0201;
  protected override void WndProc(ref Message m) {
    switch (m.Msg) {
      case WM_LBUTTONDOWN:
        if (!this.MultiSelect)
          break;

        int x = (m.LParam.ToInt32() & 0xffff);
        int y = (m.LParam.ToInt32() >> 16) & 0xffff;

        var hitTest = this.HitTest(x, y);
        if (hitTest != null && hitTest.Item != null)
          hitTest.Item.Selected = !hitTest.Item.Selected;

        return;
    }

    base.WndProc(ref m);
  }
}
2
ответ дан 14 December 2019 в 04:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: