如何使用 x++ 代码动态更改表单中按钮的可见性?

How can the visibility of a button in a form be changed dynamically using x++ code?

如何更改按钮控件的可见性 MyButton

我有一个表单 MyForm,我想在其中为我的 MyButton 按钮控件设置可见性 属性。 我在表单的 init 方法中使用了这段代码:

public void init()
{
    MyTable myTable;
    ;

    while select myTable where myTable.UserId == curUserId()
    {
        if (myTable.FlagField == NoYes::Yes )
        {
            myButton.visible(true);
        }
        if (!myTable.FlagField == NoYes::No )
        {
            myButton.visible(false);
        }
    }

    super();
}

MyButton的属性AutoDeclaration设置为Yes。但是当我打开表单时,出现以下错误:

"Failure initializing FormButtonControl object."

我想我必须使用 FormButtonControl class,但我不知道该怎么做。

窗体的控件由窗体的 init 方法中的 super() 调用初始化。要更改表单控件的属性,必须先对其进行初始化,因此必须将更改 属性 的代码放在 super() 调用之后。

FH-Inway 的回答从代码的角度来看是正确的,但我想指出你所做的是不正确的,除非你的 mineTable 只有 1 条匹配记录,否则将无法正常运行。

目前所写的,当表单被实例化时,你基本上循环 mineTable 并为每个记录 where mineTable.UserId == curUserId() 一遍又一遍地切换 myButton 可见和隐藏,然后是表单显示,无论最后一条记录是什么。

这就是while select [table] where [clause] {[code]}select [table] where [clause];的区别。

如果您在 table 中只有一条记录,则应将其更改为:

MineTable mineTable;

super();

select firstonly mineTable where mineTable.UserId == curUserId();
if (mineTable)
{
    if (mineTable.FlagField== NoYes::Yes )
    {
        myButton.visible(true);
    }
    if(!mineTable.FlagField== NoYes::No )
    {
        myButton.visible(false);
    }
}
else
{
    throw error("Record not found or whatever your error should be");
}