AX2009避免多次打开同一窗体

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());
}
posted @   adingkui  阅读(303)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示