Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
16 апр 2024, 14:22

Скопировать элемент формы

Автор Msoul, 22 ноя 2012, 16:09

0 Пользователей и 1 гость просматривают эту тему.

Msoul

Добрый день!
Никак не могу осилить одну задачку.
На форме необходимо разместить несколько одинаковых элементов формы. Форма не управляемая и количество этих одинаковых элементов не известен заранее.
Вот как раз дублированием элемента у меня не получается.
Можно ли вообще это осуществить программно?
Поле табличного документа не предлагать.

Dethmontt

Кнопка = ЭлементыФормы.Добавить(Тип("Кнопка"),"МоеУникальноеИмяКнопки");
Кнопка.Заголовок = "Какая то кнопка";

Не забываем устанавливать размер и положение кнопки, а то вы ее не увидете
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Msoul

Цитата: Dethmontt от 22 ноя 2012, 16:20
Не забываем устанавливать размер и положение кнопки, а то вы ее не увидете

Вот как раз этого и хотел избежать. Этож сколько надо параметров перебрать.
Думал может есть функция копирования.
Или хотя бы функция, которой можно получить полный список реквизитов элементов управления.

Dethmontt

Процедура КнопкаВыполнитьНажатие(Кнопка)

Перем СтарКнопка;

СколькоЯХочуКнопок = 10;
СколькоВКолонку = 4;
СтарКнопка = Неопределено;
ВысотаКн = 40;
ОбработкаНажатия = Новый Действие("ДействиеКнопкиТест");

Для Сч=0 По СколькоЯХочуКнопок-1 Цикл

старКнопка = ДобавитьКнопкуНаФормуЭлементов(СтарКнопка,ВысотаКн,Сч,ОбработкаНажатия,((сч%СколькоВКолонку) = 0));
ЭтаФорма.Обновить();

КонецЦикла;




КонецПроцедуры

Процедура ДействиеКнопкиТест(Элемент)

Сообщить(ТекущийЭлемент.Имя);

КонецПроцедуры

Функция ДобавитьКнопкуНаФормуЭлементов(СтарКнопка,ВысотаКн,знач Сч,ДействиеКн,НужнаСледКолонка)

ИмяКн = "СуперКнопка"+сч;
ИскКн = ЭлементыФормы.Найти(ИмяКн);
Если НЕ ИскКн = Неопределено Тогда
Возврат ИскКн;
КонецЕсли;

Кнопка = ЭлементыФормы.Добавить(Тип("Кнопка"),ИмяКн,Истина);
Кнопка.Заголовок = "Какая то кнопка"+Сч;

Если СтарКнопка = Неопределено Тогда
Кнопка.Верх = ВысотаКн;
Кнопка.Ширина = 50;
Кнопка.Лево = 20;
Кнопка.Высота = 40;
ИначеЕсли НужнаСледКолонка Тогда
Кнопка.Верх = ВысотаКн;
Кнопка.Ширина = 50;
Кнопка.Лево = (СтарКнопка.Лево+СтарКнопка.Ширина)+15;
Кнопка.Высота = 40;
Иначе
Кнопка.Верх = (СтарКнопка.Верх+СтарКнопка.Высота)+20;
Кнопка.Ширина = 50;
Кнопка.Лево = СтарКнопка.Лево;
Кнопка.Высота = 40;
КонецЕсли;

Кнопка.УстановитьДействие("Нажатие", ДействиеКн);

Возврат Кнопка;

КонецФункции

Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Msoul

Смирился я с тем, что надо каждый реквизит перебирать вручную.
У меня ситуация посложней чем просто кнопка. Необходимо скопировасть табличное поле (дерево значений). Все бы ничего но загвоздка с Данными. Как задать типы для колонок?

Dethmontt

Новый ОписаниеТипов("Тип" или МассивТипов)
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Msoul

С этим разобрался. У Табличного поля реквизит Значение работает как на чтение, так и на запись.
Теперь остался вопрос с установкой обработчика событий. Как назначить процедуру на событие ПриАктивизацииСтроки?

Dethmontt

ОбработкаСобытия = Новый Действие("ДействиеКнопкиТест");
ЭлементУправления.УстановитьДействие("ПриАктивизацииСтроки", ОбработкаСобытия);
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Msoul

Цитата: Dethmontt от 23 ноя 2012, 21:26ОбработкаСобытия = Новый Действие("ДействиеКнопкиТест");ЭлементУправления.УстановитьДействие("ПриАктивизацииСтроки", ОбработкаСобытия);

Спасибо.

Msoul

Добрый день!

Дабы не плодить темы продолжу в уже существующей.
Возникла новая проблема с копированием элементов формы.
Задача: На форме есть панель, на ней расположены табличное поле и поле ввода. В зависимости от ситуации необходимо скопировать эту панель и ее содержимое в низ формы, количество копий заранее не извесно. Между панелями вставить разделитель.
Проблемка: Копирование совершается успешно, границы привязываются и разделитель меняет размер панелей и элементов на ней, но так происходит только при первом открытии формы. При повторном открытии формы разделитель уже не работает должным образом.
Я так понимаю форма пытается запомнить положение и при последущем открытии восстановить, но где-то что-то не срабатывает. Подскажите где копать? Можно ли отменить попытку формы самой настроить элементы?

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск