2009-06-26 2 views
1

Элемент управления CheckBox предоставляет как логические Checked, так и System.Windows.Forms.CheckState enum CheckState свойства, которые позволяют вам установить элемент управления как в контрольном, так и в непроверенном или смешанном состоянии (Indeterminate значение перечисления).Можно ли установить отмеченный элемент списка в смешанное состояние?

Я хочу установить состояние товара ListView в Indeterminate, но, похоже, доступно только свойство Checked. Итак, есть ли способ настроить его на смешанные, возможно, с помощью обмена сообщениями в окне или подобных трюков?

ответ

3

Ну, вы можете использовать следующий метод обхода:

  1. Создать государственную ImageList с 3-мя состояниями (можно создавать изображения с помощью CheckBoxRenderer)
  2. Назначьте этот список изображений в виде списка Просмотреть
  3. Затем вам нужно для обработки OnMouseDown (или OnMouseClick) и событий OnKeyDown и изображений состояния переключения для нужного элемента списка

Конечно, вам также необходимо написать несколько вспомогательных элементов hods, чтобы получить проверенное состояние и т. д. Но в целом это решение относительно легко реализовать.

Фактически внутренняя реализация ListView делает то же самое, но эта логика скрыта внутри comctl32.dll.

+0

Это из прошлого, но я думаю, что забыл принять этот ответ. Я закончил свой собственный контроль в соответствии с этим процессом и поместил его в свой BSD лицензионный пакет Aero.Control: http://factormystic.net/projects/code/aero.controls –

-1

ListView не имеет неопределенного состояния.

+0

Я знаю, что это не подвергается свойство в Windows Forms управления; Я спрашиваю, возможно ли это другим способом. –

0

ObjectListView (оболочка с открытым исходным кодом вокруг .NET WinForms ListView) поддерживает флажки со смешанным состоянием.

Посмотрите на вкладку Simple на демо, чтобы увидеть их в действии.

(Проделав эту работу, я должен сказать, что это не так же легко, как и предполагает арбитром)

Смежные вопросы