При разработке управляемых форм часто возникает задача ограничить выбор пользователя фиксированным списком значений. При этом стандартное поле ввода нередко отображает кнопку выбора с тремя точками (кнопку открытия формы выбора) вместо привычной стрелки раскрывающегося списка или показывает обе кнопки одновременно. Разберем, как правильно настроить свойства элемента управления, чтобы оставить только кнопку с треугольником, и выясним причины такого поведения платформы.
По умолчанию у элемента формы ПолеВвода свойство КнопкаВыбора находится в значении Авто. В интерфейсе управляемых форм (особенно в режиме совместимости с версией 8.2) платформа при автоопределении отдает приоритет стандартному выбору через троеточие, если для реквизита доступно открытие формы выбора объекта. Даже при включенном флаге РежимВыбораИзСписка кнопка с троеточием продолжает отображаться, пока её явно не отключат.
Чтобы в поле ввода отображалась исключительно стрелка выпадающего списка, выполним настройку свойств элемента формы в палитре свойств:
Истина (флажок включен).Да.Авто в явное значение Нет. Это действие убирает троеточие.Ложь.Рассмотрим программное заполнение списка значений при открытии или создании формы. Важно учитывать, что список выбора должен быть заполнен до момента отрисовки элемента пользователю:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Получаем элемент формы
ЭлементПоле = Элементы.ИмяПоляВвода;
// Заполняем список выбора
ЭлементПоле.СписокВыбора.Очистить();
ЭлементПоле.СписокВыбора.Добавить("Вариант1", "Первый вариант");
ЭлементПоле.СписокВыбора.Добавить("Вариант2", "Второй вариант");
ЭлементПоле.СписокВыбора.Добавить("Вариант3", "Третий вариант");
// Программная установка свойств отображения кнопок
ЭлементПоле.РежимВыбораИзСписка = Истина;
ЭлементПоле.КнопкаВыпадающегоСписка = Истина;
ЭлементПоле.КнопкаВыбора = Ложь;
КонецПроцедуры
Разберем различия в поведении платформы в зависимости от режима интерфейса:
КнопкаВыбора = Авто упорно оставляет троеточие. Явное переключение в Ложь решает проблему.КнопкаСпискаВыбора и заполнить коллекцию СписокВыбора, после чего элемент корректно выводит треугольник.Если необходимо сформировать список динамически непосредственно в момент нажатия на поле и открыть контекстное меню выбора, проанализируем асинхронный вызов всплывающего списка:
&НаКлиенте
Процедура ИмяПоляНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Список = Новый СписокЗначений;
Список.Добавить(1, "Один");
Список.Добавить(2, "Два");
Оповещение = Новый ОписаниеОповещения("ПослеВыбораЗначения", ЭтотОбъект);
ПоказатьВыборИзСписка(Оповещение, Список, Элемент);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораЗначения(ВыбранныйЭлемент, ДополнительныеПараметры) Экспорт
Если ВыбранныйЭлемент <> Неопределено Тогда
Объект.РеквизитПоля = ВыбранныйЭлемент.Значение;
КонецЕсли;
КонецПроцедуры
Таким образом, для получения единственной кнопки со стрелкой достаточно включить КнопкаВыпадающегоСписка, жестко отключить КнопкаВыбора и убедиться, что список выбора не пуст.