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

Forms 如何使用x++代码动态更改窗体中按钮的可见性?,forms,axapta,x++,dynamics-ax-2012,form-control,Forms,Axapta,X++,Dynamics Ax 2012,Form Control,如何更改按钮控件MyButton的可见性 我有一个表单MyForm,我想在其中设置MyButton控件的可见性属性。 我在表单的init方法中使用了以下代码: MyButton的属性AutoDeclaration设置为Yes。但是,当我打开表单时,会出现以下错误: 初始化FormButtonControl对象失败 我想我必须使用FormButtonControl类,但我不知道如何做到这一点。表单的控件由表单的init方法中的super调用初始化。要更改表单控件的属性,必须首先对其进行初始化,因此

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

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

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

初始化FormButtonControl对象失败


我想我必须使用FormButtonControl类,但我不知道如何做到这一点。

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

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

FH Inway的答案从代码角度来看是正确的,但我想说的是,你所做的是不正确的,不会正常工作,除非你的mineTable只有1条匹配记录

目前,正如所写的,当表单被实例化时,您基本上会在mineTable上循环,并对每个记录(其中mineTable.UserId==curUserId)反复切换myButton可见和隐藏,然后显示表单以及最后一条记录


这就是while选择[table]where[clause]{[code]}和选择[table]where[clause]

如果该表中只有一条记录,则应将其更改为:

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

FH Inway的答案从代码的角度来看是正确的,但我想指出的是,您所做的是不正确的,并且不会正常工作,除非您的mineTable只有1条匹配记录

目前,正如所写的,当表单被实例化时,您基本上会在mineTable上循环,并对每个记录(其中mineTable.UserId==curUserId)反复切换myButton可见和隐藏,然后显示表单以及最后一条记录


这就是while选择[table]where[clause]{[code]}和选择[table]where[clause]

如果该表中只有一条记录,则应将其更改为:

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

您的代码看起来像是在超级调用之前执行的。你试过把密码放在超级电话后面吗?谢谢。代码比你在我的方法中看到的要长,我甚至有更多的代码行,使事情与你在文章中看到的有所不同。你的建议很有帮助,如果你愿意,发表你的答案,我会接受你的答案。谢谢你的帮助谢谢你的时间!您的代码看起来像是在超级调用之前执行的。你试过把密码放在超级电话后面吗?谢谢。代码比你在我的方法中看到的要长,我甚至有更多的代码行,使事情与你在文章中看到的有所不同。你的建议很有帮助,如果你愿意,发表你的答案,我会接受你的答案。谢谢你的帮助谢谢你的时间!首先+1表示花时间向询问者提供额外提示以改进代码。在看到您的答案之前,我编辑了问题,并出于类似的原因更改了代码的这一部分,但由于代码的这一部分与问题无关,我觉得没有必要在我的答案中解释更改。但是我认为你的方法更好,所以我会编辑这个问题来还原代码的这一部分,这样你的答案对未来的读者来说是有意义的。所有的假设都是假的。只需使用myButton.visiblemineTable.FlagField;这就是while选择[table]where[clause]{[code]}和选择[table]where[clause]之间的区别;可能需要澄清的是,即使没有“while”语句,select语句也可能返回多条记录,除非您执行该操作,否则您将无法看到这些记录。接下来,记录缓冲区首先是+1,用于花时间向询问者提供额外提示,以改进代码。在看到您的答案之前,我编辑了问题,并出于类似的原因更改了代码的这一部分,但由于代码的这一部分与问题无关,我觉得没有必要在我的答案中解释更改。但是我认为你的方法更好,所以我会编辑这个问题来还原代码的这一部分,这样你的答案对未来的读者来说是有意义的。所有的假设都是假的。只需使用myButton.visiblemineTable.FlagField;这就是while选择[table]where[clause]{[code]}和选择[table]where[clause]之间的区别;可能需要澄清的是,即使没有“while”语句,select语句也可能返回多条记录,除非您单击记录缓冲区,否则您将看不到它