gifts2017

Пример программного перемещения элементов на управляемой форме

Опубликовал Ратмир Вагипов (vagipov) в раздел Программирование - Работа с интерфейсом

Drag&Drop перемещение декораций на управляемой форме.

Столкнулся с тем, что Drag&Drop перемещения чаще всего реализуют для элемента ТабличныйДокумент. Однако эта возможность доступна для элемента формы "Декорация" вида "Картинка"

Шаг 0 Подготовительный

На форме размещаем Группы и декорации.

В свойствах каждой декорации устанавливаем [V] РазрешитьНачалоПеретаскивания и [V] РазрешитьПеретаскивание

Прописываем события ДекорацияНачалоПеретаскивания, ДекорацияПроверкаПеретаскивания, ДекорацияОкончаниеПеретаскивания одинаковые для всех декораций формы

Сохраняемся,  запускаем обработку...

Шаг 1

В тот момент, когда мы кликаем на элементе декорации на форме, запоминается имя декорации

&НаКлиенте
Процедура ДекорацияНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение)
    ЭтотОбъект.Параметры.Эл = Элемент.Имя;
КонецПроцедуры

Шаг 2

Начинаем перемещать элемент по форме, если в этот момент курсор мыши попадает на другую декорацию, то запоминаем имя декорации, на которую попал курсор

&НаКлиенте
Процедура ДекорацияПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ЭтотОбъект.Параметры.Эл1 = Элемент.Имя;
КонецПроцедуры

... соответственно в памяти хранится последний элемент декорации, на которой побывал курсор

Шаг 3

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

&НаКлиенте
Процедура ДекорацияОкончаниеПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    Если ЭтотОбъект.Параметры.Эл <> ЭтотОбъект.Параметры.Эл1 Тогда
        ПереместитьЭлемент();    
    КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ПереместитьЭлемент()
    Эл = ЭтаФорма.Элементы.Найти(ЭтотОбъект.Параметры.Эл);
    Эл1 = ЭтаФорма.Элементы.Найти(ЭтотОбъект.Параметры.Эл1);
    ЭтаФорма.Элементы.Переместить(Эл, Эл1.Родитель, Эл1);
КонецПроцедуры

Элемент, который перетаскивали, смещает декорацию, на которой окончили перетаскивание.

Во вложении обработка с измененной логикой окончания перетаскивания, если подставляем декорацию в конец списка, то декорация помещается в самый конец, иначе декорация помещается перед элементом, на который позиционировался курсор мыши.

Скачать файлы

Наименование Файл Версия Размер
ПеремещениеЭлементовНаУправляемойФорме 2
.epf 6,67Kb
09.11.16
2
.epf 6,67Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Михаил Кочнев (Mi4man) 10.11.16 09:16
Гифку опубликуйте пожалуйста
2. Ратмир Вагипов (vagipov) 11.11.16 14:20
(1) Mi4man, Привет, какую гифку опубликовать?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа