In questo post vediamo come aggiungere a run time dei controlli ad una form e gestire gli eventi dei controlli.
La form di base conterrà un button group a cui aggiungeremo tre pulsanti ed un gruppo a cui aggiungeremo un enumerato ed una stringa.
Dei tre pulsanti gestiamo l'evento mouseDown (in D365 l'evento mouseDown è deprecato) per capire se il pulsante è stato premuto col pulsante destro oppure col sinistro; dell'enumerato gestiamo l'evento selectionChanged e del campo stringa l'evento modified.
Sia l'aggiunta dei controlli che gli event handler vanno aggiunti nella init della form:
public void init()
{
int i;
FormButtonControl button;
FormComboBoxControl comboBox;
FormStringControl stringControl;
super();
for(i = 0; i < 3; i++)
{
button = ButtonGroup.addControl(FormControlType::Button, strFmt("button_%1",i+1));
button.text(strFmt("%1",i+1));
button.registerOverrideMethod(methodStr(FormButtonControl, mouseDown), identifierStr(buttonMouseDown), this);
}
comboBox = ControlGroup.addControl(FormControlType::ComboBox, "InventCustVend_Combo");
comboBox.enumType(enumNum(ModuleInventCustVend));
comboBox.registerOverrideMethod(methodStr(FormComboBoxControl, selectionChange), identifierStr(ComboSelectionChange), this);
stringControl = ControlGroup.addControl(FormControlType::String, "Description_Text");
stringControl.extendedDataType(extendedTypeNum(Description));
stringControl.registerOverrideMethod(methodStr(FormStringControl, modified), identifierStr(modifiedString), this);
}
I tre event handler vanno aggiunti a livello di form:
public void buttonMouseDown(int _x, int _y, int _button, boolean _Ctrl, boolean _Shift,FormButtonControl _btn)
{
switch(_button)
{
case 1:
info(strFmt("hai premuto il bottone '%1' col pulsante %2",_btn.name(),"sinistro"));
break;
case 2:
info(strFmt("hai premuto il bottone '%1' col pulsante %2",_btn.name(),"destro"));
break;
}
}
public int comboSelectionChange(FormComboBoxControl _comboBox)
{
info(strFmt("L'enumerato è cambiato %1",_comboBox.selection()));
return 1;
}
public boolean modifiedString(FormStringControl _stringControl)
{
boolean ret = true;
info(strFmt("nuovo valore '%1'",_stringControl.text()));
return ret;
}
Tutti i metodi per gestire gli eventi prendono il controllo come parametro. Se l'event prevede altri parametri standard, come nel caso mouseDown, il controllo và aggiunto come ultimo parametro.