Как сохранить выбранный предмет? - Посмотреть список - PullRequest
1 голос
/ 27 марта 2010

Я бы хотел сохранить выбранный элемент в ListView, когда пользователь нажимает на область, в которой нет элемента. Например, пространство под элементами, но все еще в компоненте ListView. Я изменил свойство ListView «HideSelection» на false, но это работает только тогда, когда фокус меняется на другой компонент; не когда пользователь нажимает на сам ListView. Спасибо! * * 1001

Ответы [ 2 ]

5 голосов
/ 27 марта 2010

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

Но вы можете это исправить.Вам нужно будет запретить нативному элементу управления ListView видеть щелчок.Для этого необходимо переопределить метод WndProc () и проверить, где произошел щелчок.Добавьте новый класс в ваш проект и вставьте код, показанный ниже.Компиляция.Перетащите новый элемент управления из верхней части панели инструментов на форму.

using System;
using System.Drawing;
using System.Windows.Forms;

class MyListView : ListView {
  protected override void WndProc(ref Message m) {
    if (m.Msg == 0x201 || m.Msg == 0x203) {  // Trap WM_LBUTTONDOWN + double click
      var pos = new Point(m.LParam.ToInt32());
      var loc = this.HitTest(pos);
      switch (loc.Location) {
        case ListViewHitTestLocations.None:
        case ListViewHitTestLocations.AboveClientArea:
        case ListViewHitTestLocations.BelowClientArea:
        case ListViewHitTestLocations.LeftOfClientArea:
        case ListViewHitTestLocations.RightOfClientArea:
          return;  // Don't let the native control see it
      }
    }
    base.WndProc(ref m);
  }
}
0 голосов
/ 27 марта 2010

В одну сторону: в событии SelectedIndexChanged проверьте, является ли значение -1; если это так, сбросьте его на предыдущее значение (которое вы, возможно, сохранили в переменной ...)

...