Thursday, December 18, 2008

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

Combo boxes in Dialogs are added by adding a DialogField object with the type of an enum. The enum is then controlling what items you can pick from the combo box.

But sometimes you may need to add a combo box with run time generated item and you of course don't have an enum for those. The Dialog framework won't really allow you to do that - it insists on getting the type of an enum.

Usually I solve this by creating a form to use as dialog in stead, but yesterday it occured to me that I could add a combo box the way Dialog likes it and then 'hijack' the form control object and modify it to my needs. 

So I add a DialogField with the type of any enum, except NoYes, which makes Dialog create the combo box control and then I get hold of the control and modify its properties. The NoYes enum won't work becasue it'll make Dialog add a check box and not a combo box.

Here's an example:

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());
}

No comments:

How to identify the user that was used to change an object from AOT in AX2012

Get the object name for which we need to track these (user and date&time) information's. Login to SQL Server Management Studio an...