Раздел: [[../ИнтерфейсПользователя]]
----
=== Как на объект класса Dialog добавить comboBox с динамически генерируемым списком ===
http://blogs.msdn.com/palle_agermark/archive/2005/06/30/434146.aspx
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());
}
=== Как динамически изменять активность поля диалога ===
[[http://forum.mazzy.ru/index.php?showtopic=1951]]
[[http://www.axforum.info/forums/showthread.php?s=&threadid=3949]] -- как изменять динамически активность поля диалога:
Если перекрыть в вашем классе метод **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 в классе DialogField.
1. Добавьте метод mandatory() в класс DialogField:
// 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
-----
[[http://spaces.msn.com/fredshen/Blog/cns!B32E9346DBBAE4E3!174.entry]]
=== Как задавать параметры диалога открытия файлов ===
Если в диалоге используется EDT [[../EDT/FileNameOpen]] или [[../EDT/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();
}