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