如何用Progress 4GL获取屏幕中Browse Widget的名称
获取Progress ABL中Browse Widget的名称方法
完全可行,你使用LIST-WIDGETS未成功的核心原因是:该函数默认仅返回当前会话中未关联到任何容器的顶级控件,而Browse通常嵌套在Frame、Window或其他容器内,因此无法被识别到。以下是几种可靠的实现方案:
方案1:遍历容器子控件(通用场景)
如果你的Browse控件放置在Frame、Window等容器中,直接遍历容器的子控件集合,筛选出Browse类型并读取其名称:
DEFINE VARIABLE hWidget AS HANDLE NO-UNDO. DEFINE VARIABLE hContainer AS HANDLE NO-UNDO. // 替换为你的容器句柄(比如默认Frame或指定Window) hContainer = FRAME {&FRAME-NAME}:HANDLE. DO hWidget = FIRST hContainer:CHILDREN TO LAST hContainer:CHILDREN: IF hWidget:TYPE = "BROWSE" THEN DO: MESSAGE "找到Browse控件:" hWidget:NAME VIEW-AS ALERT-BOX. END. END.
方案2:使用QUERY-WIDGETS精准筛选
QUERY-WIDGETS比LIST-WIDGETS更灵活,支持按控件类型、父容器等条件筛选:
DEFINE VARIABLE hBrowse AS HANDLE NO-UNDO. // 查询会话中所有Browse控件 FOR EACH WIDGET IN QUERY-WIDGETS("TYPE = 'BROWSE'"): hBrowse = WIDGET-HANDLE(WIDGET). MESSAGE "Browse名称:" hBrowse:NAME VIEW-AS ALERT-BOX. END. // 可选:限定查询范围到指定容器(比如某Window) DEFINE VARIABLE hTargetWindow AS HANDLE NO-UNDO. hTargetWindow = WINDOW w_Main:HANDLE. // 替换为你的窗口名称 FOR EACH WIDGET IN QUERY-WIDGETS("TYPE = 'BROWSE' AND PARENT = " + STRING(hTargetWindow:HANDLE)): hBrowse = WIDGET-HANDLE(WIDGET). MESSAGE "指定容器内的Browse:" hBrowse:NAME VIEW-AS ALERT-BOX. END.
方案3:直接引用已知控件句柄
如果你在创建Browse时已经保存了其句柄,可直接读取名称属性:
// 示例:创建Browse时存储句柄 DEFINE VARIABLE hBrowse_Customer AS HANDLE NO-UNDO. DEFINE VARIABLE hBrowse_Order AS HANDLE NO-UNDO. CREATE BROWSE hBrowse_Customer ASSIGN NAME = "brs_Customer" FRAME = FRAME {&FRAME-NAME}:HANDLE QUERY = QUERY qry_Customer:HANDLE ... // 其他属性配置 . CREATE BROWSE hBrowse_Order ASSIGN NAME = "brs_Order" FRAME = FRAME {&FRAME-NAME}:HANDLE QUERY = QUERY qry_Order:HANDLE ... // 其他属性配置 . // 直接获取名称 MESSAGE "Customer Browse名称:" hBrowse_Customer:NAME "Order Browse名称:" hBrowse_Order:NAME VIEW-AS ALERT-BOX.
内容的提问来源于stack exchange,提问作者Abhinit Kumar Das
相关产品推荐
相关产品推荐

