如何在网格的所有列上简单地覆盖showContextMenu?

时间:2014-07-15 08:15:15

标签: axapta

如果我在网格上覆盖showContextMenu,当我点击网格但不点击任何列时,它只会在弹出菜单中添加其他菜单。一种方法是在网格中的所有列上覆盖showContextMenu,但此解决方案看起来不正确。有没有更好的方法如何在网格的所有列上insertItem到showContextMenu?

我正在使用AX 2012。

标准代码仅在单击网格但不是网格的单个列时才有效。

int ret,ii;
int                     myMenu = 2;
PopupMenu               popupMenu = PopupMenu::create(_menuHandle);
FormListItem item;
;
deleteAttachment = popupMenu.insertItem('My menu');

ret = super(_menuHandle);

if(ret == myMenu)
{
    //My code
}

return ret;

2 个答案:

答案 0 :(得分:3)

您需要使用方法registerOverrideMethod

您可以按如下方式测试其工作原理。例如。你有一个带有网格的表单(属性Name ='网格',AutoDeclaration ='是'),并且该网格中有一些StringEdit控件。

1)在表单中创建以下方法:

public void formControlContext(FormStringControl _formStringControl)
{
    _formStringControl.context();
    info(strFmt(@"Overridden context of control '%1'", _formStringControl.name()));
}

2)在表单中覆盖方法init

public void init()
{
    FormStringControl fsc;
    int controlNum;

    super();

    for (controlNum = 1; controlNum <= Grid.controlCount(); controlNum++)
    {
        fsc = Grid.controlNum(controlNum);
        fsc.registerOverrideMethod(methodStr(FormStringControl, context), identifierStr(formControlContext));
    }
}

您只需根据需要修改方法'formControlContext'。

P.S。我刚注意到您需要覆盖方法showContextMenu而不是context。这个想法是一样的 - 使用registerOverrideMethod。你可以用这种方式覆盖任何方法。

答案 1 :(得分:2)

我从来没有玩过覆盖ShowContextMenu,但是我做了一篇关于如何递归循环遍历每个表单控件的博客文章,听起来它可能对你有帮助。

http://alexondax.blogspot.com/2014/05/how-to-use-recursion-to-loop-over-form.html

我想如果你有创意,你可以创建某种处理程序和键/值的东西。