Как скрыть значения перечисления в поле со списком во время выполнения?

Предположим, что поле со списком связано с перечислением «ABC». Элементы в нем А, В, С и D.

Теперь мне нужно получить только A и C в поле со списком, а не B и D?

Это возможно?


person Tejashree S    schedule 16.09.2011    source источник


Ответы (3)


Невозможно удалить значения перечисления или значения со списком.

Вы можете продублировать перечисление, затем удалить элементы или изменить порядок (но не значение перечисления). Вы будете нести ответственность за синхронизацию обоих типов перечислений с будущими изменениями.

Чтобы присвоить перечисление другому несовместимому перечислению, просто добавьте к нему ноль!

abc = myAbc + 0;

Или вы можете обновить поле со списком с помощью программирования (используя поле со списком без указания типа перечисления):

YourComboBox.add("A");
YourComboBox.add("C");

См. также Enum как параметр в Dynamics AX о добавлении новых значений в поле со списком.

Хотя невозможно удалить значения перечисления во время выполнения, можно скрыть значения перечисления для всего приложения. Просто измените ConfiguratioKey значения перечисления на «SysDeletedObjects40», и оно исчезнет как допустимое значение. Я предполагаю, что этот ключ конфигурации не включен!

person Jan B. Kjeldsen    schedule 16.09.2011
comment
Изменение ключа конфигурации как SysDeletedObjects40 будет работать, но будет ли это подходящим способом решения проблемы? я все еще не уверен в правильном способе сделать это - person Tejashree S; 19.09.2011
comment
Только если вы скроете B и D от всего приложения (как указано в ответе). В противном случае вам придется создать еще одно перечисление или заняться программированием (два первых варианта ответа). - person Jan B. Kjeldsen; 19.09.2011
comment
да, сделал это ... спасибо за ответ, даже я думаю так же .. Но есть ли другой способ сделать это, кроме двух указанных вами вариантов? - person Tejashree S; 19.09.2011
comment
Я не могу придумать. Невозможно удалить значения перечисления или значения со списком. - person Jan B. Kjeldsen; 19.09.2011
comment
Спасибо Ян за предложения :) - person Tejashree S; 19.09.2011

Легко, создайте метод запуска в своей форме и поместите это:

public void run()
{
    super();

    YourCombo.delete(enum2str(YourEnum::B));
    YourCombo.delete(enum2str(YourEnum::D));
}

С Уважением

person Israel González    schedule 23.08.2018

Я бы использовал комбинацию обоих! Сделайте combobox.add, но получите значения из перечисления и исключите те, которые вам не нужны. Это позволит вам перебрать перечисление и объединить это с небольшим кодом, и вы должны быть установлены:

static void Job23(Args _args)
{
    SysDictEnum sysDictEnum;
    int i;
    ;

    sysDictEnum = new SysDictEnum(EnumNum(SalesStatus));

    for (i=0; i<sysDictEnum.values(); i++)
    {
        info(strfmt("%1", sysDictEnum.index2Label(i)));
    }
}
person Alex Kwitny    schedule 25.10.2011