Někdy je potřeba umístit na dialog pole (tzn. datový typ s Array elementy). Zdrojový kód je triviální:
Dialog dialog = new Dialog("Dimenze");
;
dialog.addField(typeId(Dimension));
dialog.run();
Pokud je dále třeba nastavit nějakou vlastnost, například AllowEdit, nabízel by se takovýto zápis:
Dialog dialog = new Dialog("Dimenze");
DialogField field;
;
field = dialog.addField(typeId(Dimension));
field.allowEdit(false);
dialog.run();
Jenže… výsledek není správný. Znepřístupněné je jen první políčko:
Na formuláři totiž ve skutečnosti vznikne více políček (Fld1_1, Fld1_2 a Fld1_3) a proměnná field ukazuje pouze na první z nich.
Je nutné projít všechny všechná příslušná políčka a nastavit požadovanou vlastnost každému zvlášť.
Dialog dialog = new Dialog("Dimenze");
DialogField field;
SysDictType dictType;
FormBuildStringControl control;
int i;
;
field = dialog.addField(typeId(Dimension));
dictType = new DictType(typeId(Dimension) >> 16);
for (i = 1; i <= dictType.arraySize(); i++)
{
control = dialog.dialogForm().buildControl(field.fieldname(i));
control.allowEdit(false);
}
dialog.run();
Výsledný dialog pak má všechny dimenze neaktivní, jak bylo požadováno.
Žádné komentáře:
Okomentovat