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.
Complimenti Lorenzo, bell'articolo!
RispondiElimina