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


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

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

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

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

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

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

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

Шаг 1

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

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

Шаг 2

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

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

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

Шаг 3

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

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

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

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

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

3 Comments

  1. Mi4man

    Гифку опубликуйте пожалуйста

    Reply
  2. vagipov

    (1) Mi4man, Привет, какую гифку опубликовать?

    Reply
  3. Rustig

    (0) интересно! может пригодиться для канбан-доски

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *