# DI_LISTBOX

Элемент диалога `DI_LISTBOX` описывает список.

    struct FarDialogItem
    {
      enum FARDIALOGITEMTYPES Type = DI_LISTBOX
      intptr_t X1                  = X1
      intptr_t Y1                  = Y1
      intptr_t X2                  = X2
      intptr_t Y2                  = Y2
      struct FarList *ListItems    = ListItems
      FARDIALOGITEMFLAGS Flags     = Flags
      const wchar_t *Data          = верхний заголовок списка
    };

Внимание!

- Приведено схематичное изображение структуры; полное описание структуры см. здесь.

### ListItems

Указатель на структуру FarList, описывающую пункты для начальной инициализации списка.

### Флаги

Для элемента `DI_LISTBOX` имеют значения следующие флаги (про флаги списка см. FarListItem):

Флаг | Описание
--- | ---
DIF_DEFAULTBUTTON | флаг, означающий, что данный элемент диалога является "элементом по умолчанию"
DIF_FOCUS | определяет, что при показе диалога установить клавиатурный фокус ввода на данный элемент
DIF_LISTAUTOHIGHLIGHT | горячие клавиши будут назначены автоматически
DIF_LISTNOAMPERSAND | показывать горячие клавиши в списке
DIF_LISTWRAPMODE | "заворачивает" список при навигации по списку
DIF_LISTNOCLOSE | не закрывать диалог при выборе элемента в списке
DIF_LISTTRACKMOUSE | реагировать на движение мыши в списке
DIF_LISTTRACKMOUSEINFOCUS | реагировать на движение мыши в списке только если элемент находится в фокусе
DIF_DISABLE | элемент является недоступным
DIF_NOFOCUS | управляющий элемент не получает клавиатурный фокус ввода
DIF_LISTNOBOX | отключает прорисовку рамки вокруг списка. В этом случае `Data` игнорируется

### События

Событие | Описание
--- | ---
DN_DRAWDLGITEM | начало отрисовки элемента
DN_CTLCOLORDLGLIST | запрос цветовых атрибутов для отрисовки списка
DN_LISTCHANGE | изменилась позиция в списке
DN_LISTHOTKEY | пользователь для смены пункта в списке воспользовался горячими клавишами

### Замечания

Работа со списками `DI_COMBOBOX` и `DI_LISTBOX` организована по следующей схеме:

- Запуск DialogInit
  FarDialogItem.Param.ListItems - только для начальной инициализации.
- DM_LISTADD
  Добавляет только пункт списка, без ассоциированных данных
- DM_LISTINSERT
  Вставляет только пункт списка, без ассоциированных данных
- DM_LISTUPDATE
  Удаляет UserData для обновляемого пункта списка.
  Только обновление данных пункта списка без ассоциированных данных
- DM_LISTSETDATA
  Перед установкой новых ассоциированных данных предыдущие уничтожаются (если было выделение по памяти)
- DM_LISTGETDATA
  Возвращается значение, предварительно установленное DM_LISTSETDATA.
- DM_LISTGETDATASIZE
  Возвращается размер ассоциированных данных.
- DM_LISTGETITEM
  Возвращает только пункт списка, без ассоциированных данных.
- Завершение DialogFree
  Ассоциированные данные уничтожаются (если было выделение по памяти)

Текстовый курсор после инициализации элемента - в режиме замены.

Смотрите также:
DI_COMBOBOX, FarDialogItem