【ABAP】【屏幕绘制器】 【OOALV】 自定义选择屏幕动态隐藏控件

本文介绍了一种通过编程实现屏幕控件动态显示与隐藏的方法。主要步骤包括:设置控件分组,编写PBO代码实现控件状态切换,及设置控件功能码实现自动触发。适用于需要灵活控制界面元素显示的应用场景。
  LOOP AT SCREEN.  
    CASE screen-group1.  
      WHEN 'G01'.  
        IF yes = 'A'.  
          IF screen-name = 'TEXT'.  
            screen-active = 0.  
            MODIFY SCREEN.  
          ENDIF.  
          IF screen-name = 'NUM'.  
            screen-active = 0.  
            MODIFY SCREEN.  
          ENDIF.  
        ENDIF.  
      WHEN OTHERS.  
    ENDCASE.  
  ENDLOOP.  

与普通动态选择屏幕类似,都是需要 先设置分组,然后设置触发控件。

第一步:在屏幕绘制器中双击需要动态显示的控件,并在 属性中设置MODIFY ID 四个格子 分别代表 GROUP1、GROUP2、GROUP3、GROUP4.并且相互独立。这里是在第一个格子设置的G01。即MODIFY ID G01,分的是group1.

第二步:在PBO中贴入 以上代码 。

此时,已经可以动态隐藏/显示了,但是每次点击控件之后,都需要手动回车。

如不想要手动回车,执行第三步

第三步: 在触发 隐藏/显示控件的那个 控件上面,设置一个功能码。

至此,即可自动触发,不论是标签,还是输入框都可以控制。

ABAP OO ALV中自定义按钮可以按照以下步骤进行: ### 1. 创建ALV实例 首先需要创建一个OO ALV的实例,通常使用`CL_SALV_TABLE`类。以下是示例代码: ```abap REPORT zcustom_button_alv. TABLES: mara. DATA: lo_alv TYPE REF TO cl_salv_table, lt_mara TYPE STANDARD TABLE OF mara, lr_events TYPE REF TO cl_salv_events_table. SELECT * FROM mara INTO CORRESPONDING FIELDS OF TABLE lt_mara. TRY. cl_salv_table=>factory( IMPORTING r_salv_table = lo_alv CHANGING t_table = lt_mara ). CATCH cx_salv_msg INTO DATA(lx_msg). MESSAGE lx_msg TYPE 'E'. ENDTRY. ``` ### 2. 获取事件对象 通过ALV实例获取事件对象,以便后续注册自定义按钮点击事件。 ```abap lr_events = lo_alv->get_event( ). ``` ### 3. 自定义按钮 在ALV的工具栏中添加自定义按钮。可以使用`SET_FUNCTION_CODE`方法为按钮设置功能代码,后续根据该代码处理按钮点击事件。 ```abap DATA: lo_toolbar TYPE REF TO cl_gui_custom_container, lo_button TYPE REF TO cl_gui_button. lo_toolbar = lo_alv->get_toolbar( ). CREATE OBJECT lo_button EXPORTING parent = lo_toolbar text = '自定义按钮'. lo_button->set_function_code( 'CUSTOM_BUTTON' ). ``` ### 4. 注册按钮点击事件 为自定义按钮的点击事件注册处理方法。可以通过`SET_CALLBACK_FOR_FUNCTION_CODE`方法来实现。 ```abap lr_events->set_callback_for_function_code( EXPORTING i_function_code = 'CUSTOM_BUTTON' IMPORTING e_callback = cl_salv_events_table=>mc_callback_function_code FORWARDING r_callback = NEW cl_salv_callback_function_code( EXPORTING i_function_code = 'CUSTOM_BUTTON' i_callback = method handle_custom_button_click ) ). ``` ### 5. 实现按钮点击处理方法 定义一个方法来处理自定义按钮的点击事件。 ```abap METHOD handle_custom_button_click. MESSAGE '自定义按钮被点击' TYPE 'I'. ENDMETHOD. ``` ### 6. 显示ALV 最后,调用`DISPLAY`方法显示ALV。 ```abap lo_alv->display( ). ``` 完整代码示例如下: ```abap REPORT zcustom_button_alv. TABLES: mara. DATA: lo_alv TYPE REF TO cl_salv_table, lt_mara TYPE STANDARD TABLE OF mara, lr_events TYPE REF TO cl_salv_events_table, lo_toolbar TYPE REF TO cl_gui_custom_container, lo_button TYPE REF TO cl_gui_button. SELECT * FROM mara INTO CORRESPONDING FIELDS OF TABLE lt_mara. TRY. cl_salv_table=>factory( IMPORTING r_salv_table = lo_alv CHANGING t_table = lt_mara ). CATCH cx_salv_msg INTO DATA(lx_msg). MESSAGE lx_msg TYPE 'E'. ENDTRY. lr_events = lo_alv->get_event( ). lo_toolbar = lo_alv->get_toolbar( ). CREATE OBJECT lo_button EXPORTING parent = lo_toolbar text = '自定义按钮'. lo_button->set_function_code( 'CUSTOM_BUTTON' ). lr_events->set_callback_for_function_code( EXPORTING i_function_code = 'CUSTOM_BUTTON' IMPORTING e_callback = cl_salv_events_table=>mc_callback_function_code FORWARDING r_callback = NEW cl_salv_callback_function_code( EXPORTING i_function_code = 'CUSTOM_BUTTON' i_callback = method handle_custom_button_click ) ). METHOD handle_custom_button_click. MESSAGE '自定义按钮被点击' TYPE 'I'. ENDMETHOD. lo_alv->display( ). ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值