Combobox 如何在运行时隐藏组合框上的枚举值?

Combobox 如何在运行时隐藏组合框上的枚举值?,combobox,axapta,x++,Combobox,Axapta,X++,假设组合框链接到枚举“ABC”。其中的元素是A、B、C和D 现在我只需要在组合框中得到A和C,而不是B和D 这可能吗?无法删除枚举值或组合框值 可以复制枚举,然后删除元素或更改顺序(但不能更改枚举值)。您将负责保持两种枚举类型与将来的更改同步 要将一个枚举分配给另一个不兼容的枚举,只需向其添加零即可 abc = myAbc + 0; 或者,您可以使用编程更新组合框(使用组合框而不指定枚举类型): 另请参见关于向组合框添加新值 虽然无法在运行时删除枚举值,但可以隐藏整个应用程序的枚举值。只需将枚

假设组合框链接到枚举“ABC”。其中的元素是A、B、C和D

现在我只需要在组合框中得到A和C,而不是B和D


这可能吗?

无法删除枚举值或组合框值

可以复制枚举,然后删除元素或更改顺序(但不能更改枚举值)。您将负责保持两种枚举类型与将来的更改同步

要将一个枚举分配给另一个不兼容的枚举,只需向其添加零即可

abc = myAbc + 0;
或者,您可以使用编程更新组合框(使用组合框而不指定枚举类型):

另请参见关于向组合框添加新值


虽然无法在运行时删除枚举值,但可以隐藏整个应用程序的枚举值。只需将枚举值的configurationKey更改为“SysDeletedObjects40”,它就会作为合法值消失。我将假定此配置密钥未启用

我将两者结合使用!执行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)));
    }
}
static void Job23(Args\u Args)
{
SysDictEnum SysDictEnum;
int i;
;
sysDictEnum=新的sysDictEnum(EnumNum(SalesStatus));

对于(i=0;iEasy),在表单中创建一个run方法,并将其放入:

public void run()
{
    super();

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

更改配置键视为“SysDeletedObjects40”会起作用,但这是处理问题的适当方法吗?我仍然不确定是否有正确的方法来执行此操作,除非您将B和D隐藏在整个应用程序中(如回答中所述)。否则,您将不得不创建另一个枚举,或进行一些编程(答案中的前两个选项)。是的,这样做了…谢谢你的答案,即使我也这么认为..但是除了你指定的两个选项之外,还有其他方法可以这样做吗?我想不出任何方法。无法删除枚举值或组合框值。谢谢Jan的建议:)
public void run()
{
    super();

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