Вопрос

Добавление элемента в форму при нажатии на кнопку Terrasoft

Добрый день.

Подскажите, пожалуйста, есть задача в Terrasoft при нажатии на кнопку создавать массив элементов edit и label с названиями и именами. Плюс, нужно еще edit присвоить событие onchange.

Нравится

5 комментариев
Лучший ответ

Задачу решил так :

function PacientEmailForm(Window) {

    //Создание дополнительных компонентов для вывода массива данных для пациентов   

    try {

        var PacientLabel = null;

        var PacientName = null;

        var PacientDate = null;

        var PacientTest = null;

        var PacientText = null;

        var PacientNumber = 0;

        for (var i = 0; i < 2; i++) {

            //Создание метки для структуризации компонентов - ЗАГОЛОВОК

            PacientLabel = EmailFormWindowValue.CreateComponent('Label','lbPacient'+i);

            fgPacient.Add(PacientLabel);

            PacientLabel.AlignHorizontal = alhCenter;

            PacientLabel.AutoSize = true;

            PacientNumber = i+1;

            PacientLabel.Caption = 'Пациент № '+PacientNumber;

            //Создание поля вывода для имени пациента

            PacientName = EmailFormWindowValue.CreateComponent('Edit','edtPacientName'+i);

            fgPacient.Add(PacientName);

            PacientName.AlignHorizontal = alhClient;

            PacientName.Caption = 'ФИО';

            //Создание поля вывода для даты рождения пациента

            PacientDate = EmailFormWindowValue.CreateComponent('Edit','edtPacientDate'+i);

            fgPacient.Add(PacientDate);

            PacientDate.AlignHorizontal = alhClient;

            PacientDate.EditMask = '99.99.9999';

            PacientDate.Caption = 'Дата рождения';

            //Создание поля вывода для тестов

            PacientTest = EmailFormWindowValue.CreateComponent('Edit','edtPacientTest'+i);

            fgPacient.Add(PacientTest);

            PacientTest.AlignHorizontal = alhClient;

            PacientTest.Caption = 'Тесты и услуги';

            //Создание поля вывода для инвалидности

            PacientText = EmailFormWindowValue.CreateComponent('Edit','edtPacientText'+i);

            fgPacient.Add(PacientText);

            PacientText.AlignHorizontal = alhClient;

            PacientText.Caption = 'Инвалидности';

            //Скрыть все элементы и использовать по надобности

            PacientLabel.isVisible = false;

            PacientName.isVisible = false; 

            PacientDate.isVisible = false; 

            PacientTest.isVisible = false; 

            PacientText.isVisible = false;

        }        

        //var Pacient = Window.CreateComponent('Label','PacientLabel');

        //fgPacient.Add(Pacient); 

        //Pacient.Caption = 'Проверка!';

    } catch(E) {

        Log.Write(mdtError, '[PacientEmailForm] ' + E.message+' ['+E.number+']');

    } finally {}

}

Задачу решил так :

function PacientEmailForm(Window) {

    //Создание дополнительных компонентов для вывода массива данных для пациентов   

    try {

        var PacientLabel = null;

        var PacientName = null;

        var PacientDate = null;

        var PacientTest = null;

        var PacientText = null;

        var PacientNumber = 0;

        for (var i = 0; i < 2; i++) {

            //Создание метки для структуризации компонентов - ЗАГОЛОВОК

            PacientLabel = EmailFormWindowValue.CreateComponent('Label','lbPacient'+i);

            fgPacient.Add(PacientLabel);

            PacientLabel.AlignHorizontal = alhCenter;

            PacientLabel.AutoSize = true;

            PacientNumber = i+1;

            PacientLabel.Caption = 'Пациент № '+PacientNumber;

            //Создание поля вывода для имени пациента

            PacientName = EmailFormWindowValue.CreateComponent('Edit','edtPacientName'+i);

            fgPacient.Add(PacientName);

            PacientName.AlignHorizontal = alhClient;

            PacientName.Caption = 'ФИО';

            //Создание поля вывода для даты рождения пациента

            PacientDate = EmailFormWindowValue.CreateComponent('Edit','edtPacientDate'+i);

            fgPacient.Add(PacientDate);

            PacientDate.AlignHorizontal = alhClient;

            PacientDate.EditMask = '99.99.9999';

            PacientDate.Caption = 'Дата рождения';

            //Создание поля вывода для тестов

            PacientTest = EmailFormWindowValue.CreateComponent('Edit','edtPacientTest'+i);

            fgPacient.Add(PacientTest);

            PacientTest.AlignHorizontal = alhClient;

            PacientTest.Caption = 'Тесты и услуги';

            //Создание поля вывода для инвалидности

            PacientText = EmailFormWindowValue.CreateComponent('Edit','edtPacientText'+i);

            fgPacient.Add(PacientText);

            PacientText.AlignHorizontal = alhClient;

            PacientText.Caption = 'Инвалидности';

            //Скрыть все элементы и использовать по надобности

            PacientLabel.isVisible = false;

            PacientName.isVisible = false; 

            PacientDate.isVisible = false; 

            PacientTest.isVisible = false; 

            PacientText.isVisible = false;

        }        

        //var Pacient = Window.CreateComponent('Label','PacientLabel');

        //fgPacient.Add(Pacient); 

        //Pacient.Caption = 'Проверка!';

    } catch(E) {

        Log.Write(mdtError, '[PacientEmailForm] ' + E.message+' ['+E.number+']');

    } finally {}

}

Теперь возник вопрос, как удалить элемент созданный таким образом?

Алексей, если добавляли при помощи CreateComponent, то удалить, соответственно, можно по RemoveComponent. См. примеры в теме.

Зверев Александр,

Спасибо. Так и сделал. Правда со 2 попытки. Первая была DeleteComponent. А не подскажете, как событие присвоить Edit

.OnChange ?

Присваивают обработчики так, см. src_Main:

var MenuItem = Window.CreateComponent('ActionMenuItem', Name);
MenuItem.Caption = CaptionDataField.ValAsStr;
MenuItem.Tag = ParentIDDataField.ValAsStr;
SetObjectEventDispatcher(Window, MenuItem, MenuItem.Name, 'OnExecute',
	'DictionaryMenuItemOnExecute');

Если компонентов будет произвольное количество, можно обработчик сделать один и тот же, а в нём считывать значение свойства Tag, которое перед этим присвоить каждому разное.

Показать все комментарии