如果我在网格上覆盖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;
答案 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
我想如果你有创意,你可以创建某种处理程序和键/值的东西。