カスタムX ++フォームの複数のコピーを一度に開くことを防ぐためのヒント/コードスニペットがありますか?Dynamics AX 2012フォームのコピーを1つだけ開く
ベストケース:フォームの別のコピーを開こうとし、元の利益は
許容焦点を当てる:ユーザーフォームのに以下のコードを挿入することができ
カスタムX ++フォームの複数のコピーを一度に開くことを防ぐためのヒント/コードスニペットがありますか?Dynamics AX 2012フォームのコピーを1つだけ開く
ベストケース:フォームの別のコピーを開こうとし、元の利益は
許容焦点を当てる:ユーザーフォームのに以下のコードを挿入することができ
フォームが既に開いている旨の通知を受け、 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());
}
}
これはうまく機能します。私は、activateメソッドをelement.existingForm()に変更しなければならなかった。setActive(); activate()コマンドは元のフォームを前面に持ってこなかった。本当にありがとう! – Brad