Вопрос

Добавление элемента в форму при нажатии на кнопку 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, которое перед этим присвоить каждому разное.

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