База знаний ERP: Axapta/Класс/Dialog ...
Поиск:
Поиск по Ax сайтам
Наблюдать | Версия для печати | Вход:   Пароль:  

Раздел: ../Интерфейс Пользователя


Оглавление документа

How to add a combo box with runtime generated items to a Dialog object

(Как на объект класса Dialog добавить comboBox с динамически генерируемым списком)

static void comboBoxHiJacker(Args _args)
{
    Dialog                      dialog = new Dialog();
    DialogField                 dialogField;
    FormBuildComboBoxControl    formComboBoxControl;
    ;

    // Any enum, except NoYes, will do.
    dialogField = dialog.addField(typeId(ABC));

    formComboBoxControl = dialogField.control();
    formComboBoxControl.enumType(0);

    formComboBoxControl.label("My combo box");

    formComboBoxControl.items(3);

    formComboBoxControl.item(1);
    formComboBoxControl.text("Item 1");

    formComboBoxControl.item(2);
    formComboBoxControl.text("Item 2");

    formComboBoxControl.item(3);
    formComboBoxControl.text("Item 3");

    dialog.run();

    info(dialogField.value());
}

Как динамически изменять активность поля диалога

Как можно перекрыть метод контрола формы, создаваемого в рантайме? – Форум у Mazzy
AXForum – Axapta: Программирование – Вопрос про диалоговое окно — как изменять динамически активность поля диалога:


Если перекрыть в вашем классе метод void dialogSelectCtrl() и произвести вызов метода dialog.allowUpdateOnSelectCtrl(true); в перекрытом методе dialog(), то ваш перекрытый метод dialogSelectCtrl() будет вызываться каждый раз при получении фокуса элементом ввода.


Вконце метода dialog() добавляете следующий код

{
  ...
  dialog.allowUpdateOnSelectCtrl(true);
  this.dialogSelectCtrl();

  return dialog;
}


далее перекрываете метод dialogSelectCtrl(), в котором и обрабатываете ваши контролы. Например так:

public void dialogSelectCtrl()
{
    super();

    flag = dlgControlFlag.value();
    if(flag)
        dlgControlField.active(false);
    else
        dlgControlField.active(true);
}

Советую однако использовать вместо active() свойство allowEdit(), так как результат
практически тот же, но обновление работает лучше.

Как сделать поле диалога обязательным для заполнения


из microsoft.public.axapta.programming, Regards! Ruslan:


Поле диалога можно сделать обязательным для заполнения.
Для этого нужно создать метод для изменения свойства mandatory в классе Dialog Field?.


1. Добавьте метод mandatory() в класс Dialog Field?:

// Created by GRR on 01.11.2005
void mandatory(boolean r)
{
    str name;
 
    // If properties exists then we are on server - если properties существуют, значит код исполняется на сервере
    if (properties)
    {
        name = #Propertymandatory;
        if (! properties.exists(name))
            properties.add(name,true);
        properties.value(name,r);
    }
    else
        this.fieldControl().mandatory(r);
}


2. В код метода unpack() добавьте следующие строки:

.......................
            // Created by GRR on 01.11.2005 -->
            case #PropertyMandatory:
                
this.mandatory(unpackedProperties.valueIndex(i));
                break;
            // Created by GRR on 01.11.2005 <--
.......................

Аналогичным способом можно добавить, к примеру, управление свойством replaceOnLookup


Fred Shen: Change the combobox options in RunbaseBatch class

Как задавать параметры диалога открытия файлов


Если в диалоге используется EDT FileNameOpen? или FileNameSave?, то совйства открывающегося диалога выбора файла можно задать при помощи свойств filename* диалога.


Пример:

static void Test_DialogFileNameOpen(Args _args)
{
    Dialog d=new Dialog("Test");
    DialogField f = d.addField(typeID(FileNameOpen));
;
    d.filenameLookupFileName('*.txt');
    d.filenameLookupInitialPath(WinApi::getTempPath());
    d.filenameLookupTitle("Title");
    d.filenameLookupFilter(["*.txt", "Текстовые файлы"]);
    d.run();
}


 
Комментариев нет. [Показать комментарии/форму]
Время работы: 0.632 s
Использовано памяти: 0.328 Mb