避免多次打开同一窗体

AX通过菜单可以多次打开同一个窗体,有些客户想同一个窗体只打开一次,如果第二次点击就把原来已经窗体显示在最上面。AX提供了一些API用来做这事,并且有合适的入口用来增加一些处理代码。
1.修改类工厂ClassFactory的FormRunClass方法

FormRun formRunClass(Args args)
{
    #FormCacheMark
    Hwnd            hwnd;
    ;
    
if(infolog.globalCache().isSet(#FormCacheMark,args.name()))
    
{
        hwnd 
= infolog.globalCache().get(#FormCacheMark,args.name());

        WinAPI::bringWindowToTop(hwnd);
        
return null;
    }

    
return ClassFactory::formRunClassOnClient(args);
}

增加一个判断,判断当前客户端是否有该窗体的实例,如果有的话,就直接将窗体显示在最前端,并返回null。
2.修改SysSetupFormRun类的init方法,在Super()方法之后保存当前窗体的hwnd,以便以后调用。

public void init()
{
    ;
    super();
    infolog.globalCache().
set(#FormCacheMark,this.name(),this.hWnd());
    SysSecurityFormSetup::loadSecurity(
this);
}

3.修改SysSetupFormRun类的close方法,在关闭窗体时从全局缓存中去掉当前窗体。

public void close()
{
    super();
    infolog.globalCache().remove(#FormCacheMark,
this.name());
}

OK,就这么简单。具体代码如附件所示。

原文地址:https://www.cnblogs.com/Farseer1215/p/1012681.html