6

任何人都有任何提示/代码片段来防止一次打开多个自定义 X++ 表单的副本?

最佳情况:尝试打开另一个表单副本,而原始副本获得焦点

可接受:用户收到表单已打开的通知

4

2 回答 2

10

您可以将下面的代码插入到表单的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();
    }
}
于 2013-10-17T11:23:59.307 回答
0

将以下代码添加到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());
    }
}
于 2014-12-02T10:39:57.867 回答