Многофункциональная кнопка
Когда на форме всего две кнопки: ОК и Закрыть проблема с многофункциональностью кнопок не возникает. Но вот когда нет места из-за обилия разных флажков, переключателей и других элементов формы, тогда приходится призадумываться об уплотнении.
Задача: имеем только одну кнопку, но она должна менять не только название, но выполнять совершенно разные действия. Нижеследующий пример показывает как это можно сделать.
Всю работу можно условно разбить на 4-е этапа:
- 1.визуальное проектирование кнопки;
- 2.создание списка возможных значений кнопки;
- 3.изменение заголовка кнопки;
- 4.запуск нужной процедуры соответсвующей названию кнопки.
1. Визуальное проектирование кнопки.
2. Создание списка возможных значений.
Это просто: создаем список значений и в него добавляем нужные значения, в примере их пять.
Сз=СоздатьОбъект("СписокЗначений");
Сз.ДобавитьЗначение("Удалить");
Сз.ДобавитьЗначение("Добавить");
Сз.ДобавитьЗначение("Очистить");
Сз.ДобавитьЗначение("Просмотр");
Сз.ДобавитьЗначение("Выход");
3. Изменение заголовка кнопки.
Для этого будем использовать метод ВыбратьЗначение. У него пять параметров: первые два нам вообще не нужны, в третий параметр - в переменную Поз будем записывать номер строки из списка значений на которой щелкнули мышкой. Последний параметр, дело вкуса, он просто определяет вид списка. Мне нравится значение этого параметра = 1. Предпоследний параметр в общем-то также не нужен здесь(это таймаут)
Вот что получится:
Процедура ПриВыборе()
Сз.ВыбратьЗначение(,,Поз,,1);
Если Поз=1 Тогда
Форма.Кнопка.Заголовок(Сз.ПолучитьЗначение(1));
ИначеЕсли Поз=2 Тогда
Форма.Кнопка.Заголовок(Сз.ПолучитьЗначение(2));
ИначеЕсли Поз=3 Тогда
Форма.Кнопка.Заголовок(Сз.ПолучитьЗначение(3));
ИначеЕсли Поз=4 Тогда
Форма.Кнопка.Заголовок(Сз.ПолучитьЗначение(4));
Иначе
Форма.Кнопка.Заголовок(Сз.ПолучитьЗначение(5));
КонецЕсли;
КонецПроцедуры
Все просто: кликаем на пятой строке в списке где значение - Выход, в переменной Поз появляется число 5.
При срабатывании процедуры ПриВыборе(),по значению в Поз=5 кнопке присваивается заголовок Выход.