【发布时间】:2013-10-25 12:56:26
【问题描述】:
谁有任何技巧/代码 sn-ps 来防止一次打开多个自定义 X++ 表单的副本?
最佳情况:尝试打开表单的另一个副本,原来的获得焦点
可接受:用户收到表单已打开的通知
【问题讨论】:
标签: forms axapta x++ dynamics-ax-2012
谁有任何技巧/代码 sn-ps 来防止一次打开多个自定义 X++ 表单的副本?
最佳情况:尝试打开表单的另一个副本,原来的获得焦点
可接受:用户收到表单已打开的通知
【问题讨论】:
标签: forms axapta x++ dynamics-ax-2012
您可以将下面的代码插入到表单的init 方法中。
如果您对代码有任何疑问,请不要犹豫!
public void init()
{
#define.CACHE_OWNER ('MyForm')
#define.CACHE_KEY_INSTANCE ('Instance')
FormRun existingForm()
{
;
if (infolog.globalCache().isSet(#CACHE_OWNER, #CACHE_KEY_INSTANCE))
{
return infolog.globalCache().get(
#CACHE_OWNER, #CACHE_KEY_INSTANCE);
}
return null;
}
void registerThisForm()
{
;
infolog.globalCache().set(#CACHE_OWNER, #CACHE_KEY_INSTANCE, this);
}
boolean isAlreadyOpened()
{
;
return existingForm() ? !existingForm().closed() : false;
}
void activateExistingForm()
{
;
existingForm().activate(true);
}
;
super();
if (isAlreadyOpened())
{
activateExistingForm();
this.close();
}
else
{
registerThisForm();
}
}
【讨论】:
将以下代码添加到表单的init 方法中,如下所示。无需进行其他更改。
public void init()
{
#define.CACHE_OWNER('MyForm')
int hWnd;
super();
if (infolog.globalCache().isSet(#CACHE_OWNER, curUserId()))
{
hWnd = infolog.globalCache().get(#CACHE_OWNER, curUserId());
}
if (WinApi::isWindow(hWnd))
{
element.closeCancel();
WinAPI::bringWindowToTop(hWnd);
}
else
{
infolog.globalCache().set(#CACHE_OWNER, curUserId(), element.hWnd());
}
}
【讨论】: