Владелец переменного размера привлекает ComboBox; список, не измеряющий правильно

Я получил класс из ComboBox, сделал это владельцем оттянутое поле списка (DrawMode. Стиль OwnerDrawVariable), и путем переопределения OnMeasureItem и OnDrawItem, я добавляю специальные объекты к выпадающему списку (разделители, например), которые имеют меньший/больше размер, чем нормальные объекты, которые населяют управление.

Теперь, проблема я имею и, может казаться, эффективно не исправляю, калибровка выпадающего списка: существует ужасный вакуум в конце списка, когда он раскрывается. Я думал, что занялся этим путем установки свойства DropDownHeight ComboBox к сумме высоты всех объектов, но это, кажется, не работает все время. Иногда, на случайном числе объектов, Пустом Пробеле Роковых возвратов. Это - необычная проблема, но надо надеяться общее и легко зафиксировало тот.

Как я могу получить выпадающий список ComboBox к размеру точно к размеру, занятому объектами в нем?

5
задан gotopie 27 December 2009 в 22:12
поделиться

3 ответа

Я вижу довольно глупую ошибку в методе ComboBox.UpdateDropDownHeight(). Когда свойство DropDownHeight совпадает со значением по умолчанию, оно вычисляет пользовательскую высоту, чтобы соответствовать выпадающему количеству элементов. Оно делает это даже когда вы изменили режим DrawMode, это просто неправильно.

Обходной путь:

  int height = ...; // Your code here
  if (height == 106) ++height;
  comboBox1.DropDownHeight = height;

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

.
4
ответ дан 14 December 2019 в 08:52
поделиться

Полагаю, проблема в том, как вы вычисляете высоту выпадающего списка, я думаю, что это smth типа так:

comboBox.DropDownHeight = N_of_items * item_height;

общая высота выпадающего списка должна также включать высоту его верхней и нижней границы, так что если вы сделаете smth типа так:

comboBox.DropDownHeight = N_of_items * item_height + SystemInformation.BorderSize.Height*2;

это должно сделать трюк и показать выпадающий список без белых областей

надеюсь, это поможет, уважаемый

.
1
ответ дан 14 December 2019 в 08:52
поделиться

Я долгое время боролся с этой же проблемой.

Когда вы добавляете пользовательские элементы в выпадающий ящик, DropDownHeight не будет установлен должным образом. Для того, чтобы гарантировать, что вы получите правильную настройку каждый раз, вам нужно перехватить сообщение Windows.

Это сообщение показывает как. Просто следите за высотой всех элементов (стандартных и пользовательских) в вашем выпадающем списке, а затем установите общую высоту выпадающего элемента, как показано в примере

.
2
ответ дан 14 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

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