9.Tree
Simple Tree:使用cl_gui_simple_tree类创建只有单个节点Tree;
List Tree:使用cl_gui_list_tree类创建每个节点有多个entry,从左到右;
Column Tree:cl_gui_column_tree类自定义拥有多列的节点;
示例:SAPSIMPLE_TREE_CONTROL_DEMO;
示例:SAPTLIST_TREE_CONTROL_DEMO;
示例:SAPCOLUMN_TREE_CONTROL_DEMO;
示例:SAPSIMPLE_TREE_DRAG_DROP_DEMO;
示例:RSDEMO_DRAG_DROP_TREE_MULTI;
示例1:cl_gui_simple_tree
CLASS c8_event_handler DEFINITION.
PUBLIC SECTION.
CLASS-DATA:gv_string TYPE string.
CLASS-METHODS:m_node_double_click FOR EVENT node_double_click OF cl_gui_simple_tree
IMPORTING node_key.
CLASS-METHODS:m_expand_no_children FOR EVENT expand_no_children OF cl_gui_simple_tree
IMPORTING node_key sender.
ENDCLASS.
CLASS c8_event_handler IMPLEMENTATION.
METHOD:m_node_double_click.
gv_string = 'node double click node key:' && node_key.
MESSAGE gv_string TYPE 'I'.
ENDMETHOD.
METHOD:m_expand_no_children.
DATA:lt_node TYPE TABLE OF mtreesnode.
DATA:ls_node LIKE LINE OF lt_node.
IF node_key = 'Item1'.
"添加节点
CLEAR ls_node.
ls_node-node_key = 'New1'.
ls_node-relatkey = 'Item1'.
ls_node-relatship = cl_gui_column_tree=>relat_last_child.
ls_node-n_image = '@FO@'.
ls_node-exp_image = '@W5@'.
ls_node-text = 'Node New1'.
APPEND ls_node TO lt_node.
CLEAR ls_node.
ls_node-node_key = 'New2'.
ls_node-relatkey = 'Item1'.
ls_node-relatship = cl_gui_column_tree=>relat_last_child.
ls_node-n_image = '@FO@'.
ls_node-exp_image = '@W5@'.
ls_node-text = 'Node New2'.
APPEND ls_node TO lt_node.
sender->add_nodes(
EXPORTING
node_table = lt_node
table_structure_name = 'MTREESNODE'
).
ENDIF.
gv_string = 'expand no children node key:' && node_key.
MESSAGE gv_string TYPE 'I'.
ENDMETHOD.
ENDCLASS.
CLASS c8_simple_tree DEFINITION.
PUBLIC SECTION.
DATA:lo_simple_tree TYPE REF TO cl_gui_simple_tree.
METHODS:m_init_tree.
"创建节点
METHODS:m_creat_node.
"注册事件
METHODS:m_regist_event.
ENDCLASS.
CLASS c8_simple_tree IMPLEMENTATION.
METHOD:m_init_tree.
"创建tree
CREATE OBJECT lo_simple_tree
EXPORTING
parent = cl_gui_container=>default_screen
node_selection_mode = cl_gui_column_tree=>node_sel_mode_single.
"创建node
me->m_creat_node( ).
"注册事件
me->m_regist_event( ).
ENDMETHOD.
METHOD m_creat_node.
DATA:lt_node TYPE TABLE OF mtreesnode.
DATA:ls_node LIKE LINE OF lt_node.
"添加节点
ls_node-node_key = 'Root'.
ls_node-isfolder = 'X'.
ls_node-n_image = '@FO@'.
ls_node-exp_image = '@W5@'.
ls_node-hidden = ''.
ls_node-disabled = ''.
ls_node-text = 'Root Node'.
APPEND ls_node TO lt_node.
CLEAR ls_node.
ls_node-node_key = 'Item1'.
ls_node-relatkey = 'Root'.
ls_node-relatship = cl_gui_column_tree=>relat_last_child.
ls_node-isfolder = 'X'.
ls_node-expander = 'X'.
ls_node-n_image = '@FO@'.
ls_node-exp_image = '@W5@'.
ls_node-text = 'Item1 Node'.
APPEND ls_node TO lt_node.
lo_simple_tree->add_nodes(
EXPORTING
node_table = lt_node
table_structure_name = 'MTREESNODE'
).
ENDMETHOD.
METHOD m_regist_event.
DATA:lt_events TYPE cntl_simple_events.
DATA:ls_events TYPE cntl_simple_event.
ls_events-eventid = cl_gui_column_tree=>eventid_node_double_click.
ls_events-appl_event = ''.
APPEND ls_events TO lt_events.
ls_events-eventid = cl_gui_column_tree=>eventid_expand_no_children.
ls_events-appl_event = ''.
APPEND ls_events TO lt_events.
"设置事件
lo_simple_tree->set_registered_events(
events = lt_events
).
SET HANDLER c8_event_handler=>m_node_double_click FOR lo_simple_tree.
SET HANDLER c8_event_handler=>m_expand_no_children FOR lo_simple_tree.
ENDMETHOD.
ENDCLASS.
示例2:cl_gui_list_tree
CLASS c8_event_handler DEFINITION.
PUBLIC SECTION.
CLASS-DATA:gv_string TYPE string.
CLASS-METHODS:m_node_double_click FOR EVENT node_double_click OF cl_gui_list_tree
IMPORTING node_key.
CLASS-METHODS:m_header_click FOR EVENT header_click OF cl_gui_list_tree
IMPORTING header_name.
CLASS-METHODS:m_expand_no_children FOR EVENT expand_no_children OF cl_gui_list_tree
IMPORTING node_key sender.
CLASS-METHODS:m_item_double_click FOR EVENT item_double_click OF cl_gui_list_tree
IMPORTING node_key item_name.
CLASS-METHODS:m_button_click FOR EVENT button_click OF cl_gui_list_tree
IMPORTING node_key item_name.
CLASS-METHODS:m_link_click FOR EVENT link_click OF cl_gui_list_tree
IMPORTING node_key item_name.
CLASS-METHODS:m_checkbox_change FOR EVENT checkbox_change OF cl_gui_list_tree
IMPORTING node_key item_name checked.
ENDCLASS.
CLASS c8_event_handler IMPLEMENTATION.
METHOD:m_node_double_click.
gv_string = 'node double click node key:' && node_key.
MESSAGE gv_string TYPE 'I'.
ENDMETHOD.
METHOD:m_header_click.
gv_string = 'header name:' && header_name.
MESSAGE gv_string TYPE 'I'.
ENDMETHOD.
METHOD:m_expand_no_children.
DATA:lt_node TYPE treev_ntab.
DATA:ls_node TYPE treev_node.
DATA:lt_item TYPE TABLE OF mtreeitm.
DATA:ls_item TYPE mtreeitm.
IF node_key = 'Item2'.
DO 2 TIMES.
"Item2添加New21,New22子节点
CLEAR ls_node.
ls_node-node_key = 'New2' && sy-index.
ls_node-relatkey = 'Item2'.
ls_node-relatship = cl_gui_list_tree=>relat_last_child.
APPEND ls_node TO lt_node.
"设置new2的text
CLEAR ls_item.
ls_item-node_key = 'New2' && sy-index.
ls_item-item_name = sy-index.
"item种类
ls_item-class = cl_gui_list_tree=>item_class_text.
"字体ITEM_FONT_DEFAULT,ITEM_FONT_FIXED,ITEM_FONT_PROP
ls_item-font = cl_gui_list_tree=>item_font_prop.
"align_xxx,left,auto,right,center
ls_item-alignment = cl_gui_list_tree=>align_left.
ls_item-t_image = '@B1@'."图标
ls_item-length = 5. "长度
ls_item-usebgcolor = 'X'."是否使用bgcolor
ls_item-text = 'text' && sy-index.
APPEND ls_item TO lt_item.
"设置new2的text
CLEAR ls_item.
ls_item-node_key = 'New2' && sy-index.
ls_item-item_name = sy-index + 1.
"item种类
ls_item-class = cl_gui_list_tree=>item_class_text.
"align_xxx,left,auto,right,center
ls_item-alignment = cl_gui_list_tree=>align_left.
ls_item-t_image = '@B1@'."图标
ls_item-length = 5. "长度
ls_item-usebgcolor = 'X'."是否使用bgcolor
ls_item-text = 'text' && sy-index.
APPEND ls_item TO lt_item.
ENDDO.
sender->add_nodes_and_items(
EXPORTING
node_table = lt_node
item_table = lt_item
item_table_structure_name = 'MTREEITM'
).
ENDIF.
gv_string = 'expand no children node key:' && node_key.
MESSAGE gv_string TYPE 'I'.
ENDMETHOD.
METHOD:m_item_double_click.
gv_string = 'item double click node key:'
&& node_key && 'item name:' && item_name.
MESSAGE gv_string TYPE 'I'.
ENDMETHOD.
METHOD:m_button_click.
gv_string = 'butto click key:'
&& node_key && 'item name:' && item_name.
MESSAGE gv_string TYPE 'I'.
ENDMETHOD.
METHOD:m_link_click.
gv_string = 'link click node key:'
&& node_key && 'item name:' && item_name.
MESSAGE gv_string TYPE 'I'.
ENDMETHOD.
METHOD:m_checkbox_change.
gv_string = 'checkbox change node key:'
&& node_key && 'item name:' && item_name.
MESSAGE gv_string TYPE 'I'.
ENDMETHOD.
ENDCLASS.
CLASS c8_list_tree DEFINITION.
PUBLIC SECTION.
DATA:lo_list_tree TYPE REF TO cl_gui_list_tree.
METHODS:m_init_tree.
METHODS:m_creat_node.
METHODS:m_regist_event.
ENDCLASS.
CLASS c8_list_tree IMPLEMENTATION.
METHOD:m_init_tree.
"创建tree
CREATE OBJECT lo_list_tree
EXPORTING
parent = cl_gui_container=>default_screen
node_selection_mode = cl_gui_column_tree=>node_sel_mode_single
item_selection = 'X'
with_headers = ''.
"创建node
me->m_creat_node( ).
"注册事件
me->m_regist_event( ).
ENDMETHOD.
METHOD m_creat_node.
DATA:lt_node TYPE treev_ntab.
DATA:ls_node TYPE treev_node.
DATA:lt_item TYPE TABLE OF mtreeitm.
DATA:ls_item TYPE mtreeitm.
"添加根节点
ls_node-node_key = 'Root'.
ls_node-isfolder = 'X'.
ls_node-n_image = '@FO@'.
ls_node-exp_image = '@W5@'.
ls_node-hidden = ''.
ls_node-disabled = ''.
APPEND ls_node TO lt_node.
DO 2 TIMES.
"Root添加Item1,2子节点
CLEAR ls_node.
ls_node-node_key = 'Item' && sy-index.
ls_node-relatkey = 'Root'.
ls_node-relatship = cl_gui_list_tree=>relat_last_child.
ls_node-isfolder = 'X'.
ls_node-expander = 'X'.
ls_node-n_image = '@FO@'.
ls_node-exp_image = '@W5@'.
APPEND ls_node TO lt_node.
"Item1添加New1,New2子节点
CLEAR ls_node.
ls_node-node_key = 'New' && sy-index.
ls_node-relatkey = 'Item1'.
ls_node-relatship = cl_gui_list_tree=>relat_last_child.
APPEND ls_node TO lt_node.
ENDDO.
"设置root text
ls_item-node_key = 'Root'.
ls_item-item_name = '1'.
ls_item-class = cl_gui_list_tree=>item_class_text.
ls_item-length = 10. "长度
ls_item-text = 'Root text'.
APPEND ls_item TO lt_item.
DO 2 TIMES.
"设置Item1,2的text
CLEAR ls_item.
ls_item-node_key = 'Item' && sy-index.
ls_item-item_name = '1'.
ls_item-class = cl_gui_list_tree=>item_class_text.
ls_item-length = 10. "长度
ls_item-text = ls_item-node_key && ' text'.
APPEND ls_item TO lt_item.
ENDDO.
DO 2 TIMES.
"设置new1的text
CLEAR ls_item.
ls_item-node_key = 'New' && sy-index.
ls_item-item_name = '1'.
"item种类
ls_item-class = cl_gui_list_tree=>item_class_text.
"字体ITEM_FONT_DEFAULT,ITEM_FONT_FIXED,ITEM_FONT_PROP
ls_item-font = cl_gui_list_tree=>item_font_prop.
ls_item-disabled = ''."是否可用
ls_item-editable = ''."是否可编辑
ls_item-hidden = ''. "是否隐藏
"align_xxx,left,auto,right,center
ls_item-alignment = cl_gui_list_tree=>align_left.
ls_item-t_image = '@B1@'."图标
ls_item-chosen = ''."是否可选
ls_item-togg_right = ''. "是否toggle
ls_item-style = cl_gui_list_tree=>style_emphasized.
ls_item-length = 5. "长度
ls_item-length_pix = ''."是否使用pix
ls_item-ignoreimag = ''. "是否忽略imag
ls_item-usebgcolor = ''."是否使用bgcolor
ls_item-txtisqinfo = ''. "是否text为qinfo
ls_item-text = 'text' && sy-index.
APPEND ls_item TO lt_item.
"设置new1的button
CLEAR ls_item.
ls_item-node_key = 'New' && sy-index.
ls_item-item_name = '2'.
"item种类
ls_item-class = cl_gui_list_tree=>item_class_button.
ls_item-length = 10. "长度
ls_item-text = 'button' && sy-index.
APPEND ls_item TO lt_item.
"设置new1的link
CLEAR ls_item.
ls_item-node_key = 'New' && sy-index.
ls_item-item_name = '3'.
"item种类
ls_item-class = cl_gui_list_tree=>item_class_link.
ls_item-length = 10. "长度
ls_item-text = 'link' && sy-index.
APPEND ls_item TO lt_item.
"设置new1的link
CLEAR ls_item.
ls_item-node_key = 'New' && sy-index.
ls_item-item_name = '4'.
"item种类
ls_item-class = cl_gui_list_tree=>item_class_checkbox.
ls_item-length = 1. "长度
ls_item-txtisqinfo = 'X'. "qinfo
ls_item-editable = 'X'."是否可编辑
ls_item-text = 'checkbox' && sy-index.
APPEND ls_item TO lt_item.
ENDDO.
lo_list_tree->add_nodes_and_items(
EXPORTING
node_table = lt_node
item_table = lt_item
item_table_structure_name = 'MTREEITM'
).
ENDMETHOD.
METHOD m_regist_event.
DATA:lt_events TYPE cntl_simple_events.
DATA:ls_events TYPE cntl_simple_event.
ls_events-eventid = cl_gui_column_tree=>eventid_node_double_click.
ls_events-appl_event = ''.
APPEND ls_events TO lt_events.
ls_events-eventid = cl_gui_column_tree=>eventid_header_click.
ls_events-appl_event = ''.
APPEND ls_events TO lt_events.
ls_events-eventid = cl_gui_column_tree=>eventid_expand_no_children.
ls_events-appl_event = ''.
APPEND ls_events TO lt_events.
ls_events-eventid = cl_gui_column_tree=>eventid_item_double_click.
ls_events-appl_event = ''.
APPEND ls_events TO lt_events.
ls_events-eventid = cl_gui_column_tree=>eventid_button_click.
ls_events-appl_event = ''.
APPEND ls_events TO lt_events.
ls_events-eventid = cl_gui_column_tree=>eventid_link_click.
ls_events-appl_event = ''.
APPEND ls_events TO lt_events.
ls_events-eventid = cl_gui_column_tree=>eventid_checkbox_change.
ls_events-appl_event = ''.
APPEND ls_events TO lt_events.
"设置事件
lo_list_tree->set_registered_events(
events = lt_events
).
SET HANDLER c8_event_handler=>m_node_double_click FOR lo_list_tree.
SET HANDLER c8_event_handler=>m_header_click FOR lo_list_tree.
SET HANDLER c8_event_handler=>m_expand_no_children FOR lo_list_tree.
SET HANDLER c8_event_handler=>m_item_double_click FOR lo_list_tree.
SET HANDLER c8_event_handler=>m_button_click FOR lo_list_tree.
SET HANDLER c8_event_handler=>m_link_click FOR lo_list_tree.
SET HANDLER c8_event_handler=>m_checkbox_change FOR lo_list_tree.
ENDMETHOD.
ENDCLASS.
示例3:cl_gui_column_tree
CLASS c8_event_handler DEFINITION.
PUBLIC SECTION.
CLASS-DATA:gv_string TYPE string.
CLASS-METHODS:m_node_double_click FOR EVENT node_double_click OF cl_gui_column_tree
IMPORTING node_key.
CLASS-METHODS:m_header_click FOR EVENT header_click OF cl_gui_column_tree
IMPORTING header_name.
CLASS-METHODS:m_expand_no_children FOR EVENT expand_no_children OF cl_gui_column_tree
IMPORTING node_key sender.
CLASS-METHODS:m_item_double_click FOR EVENT item_double_click OF cl_gui_column_tree
IMPORTING node_key item_name.
CLASS-METHODS:m_button_click FOR EVENT button_click OF cl_gui_column_tree
IMPORTING node_key item_name.
CLASS-METHODS:m_link_click FOR EVENT link_click OF cl_gui_column_tree
IMPORTING node_key item_name.
CLASS-METHODS:m_checkbox_change FOR EVENT checkbox_change OF cl_gui_column_tree
IMPORTING node_key item_name checked.
ENDCLASS.
CLASS c8_event_handler IMPLEMENTATION.
METHOD:m_node_double_click.
gv_string = 'node double click node key:' && node_key.
MESSAGE gv_string TYPE 'I'.
ENDMETHOD.
METHOD:m_header_click.
gv_string = 'header name:' && header_name.
MESSAGE gv_string TYPE 'I'.
ENDMETHOD.
METHOD:m_expand_no_children.
DATA:lt_node TYPE treev_ntab.
DATA:ls_node TYPE treev_node.
DATA:lt_item TYPE TABLE OF mtreeitm.
DATA:ls_item TYPE mtreeitm.
IF node_key = 'Item1'.
"添加节点
CLEAR ls_node.
ls_node-node_key = 'New1'.
ls_node-relatkey = 'Item1'.
ls_node-relatship = cl_gui_column_tree=>relat_last_child.
ls_node-n_image = '@FO@'.
ls_node-exp_image = '@W5@'.
APPEND ls_node TO lt_node.
CLEAR ls_node.
ls_node-node_key = 'New2'.
ls_node-relatkey = 'Item1'.
ls_node-relatship = cl_gui_column_tree=>relat_last_child.
ls_node-n_image = '@FO@'.
ls_node-exp_image = '@W5@'.
APPEND ls_node TO lt_node.
"设置column item
ls_item-node_key = 'New1'.
ls_item-item_name = 'Col1'.
ls_item-class = cl_gui_column_tree=>item_class_text.
ls_item-text = 'New1->col1'.
APPEND ls_item TO lt_item.
ls_item-node_key = 'New1'.
ls_item-item_name = 'Col2'.
ls_item-class = cl_gui_column_tree=>item_class_text.
ls_item-text = 'New1->col2'.
APPEND ls_item TO lt_item.
ls_item-node_key = 'New1'.
ls_item-item_name = 'Col3'.
ls_item-class = cl_gui_column_tree=>item_class_text.
ls_item-text = 'New1->col3'.
APPEND ls_item TO lt_item.
sender->add_nodes_and_items(
EXPORTING
node_table = lt_node
item_table = lt_item
item_table_structure_name = 'MTREEITM'
).
ENDIF.
gv_string = 'expand no children node key:' && node_key.
MESSAGE gv_string TYPE 'I'.
ENDMETHOD.
METHOD:m_item_double_click.
gv_string = 'item double click node key:'
&& node_key && 'item name:' && item_name.
MESSAGE gv_string TYPE 'I'.
ENDMETHOD.
METHOD:m_button_click.
gv_string = 'butto click key:'
&& node_key && 'item name:' && item_name.
MESSAGE gv_string TYPE 'I'.
ENDMETHOD.
METHOD:m_link_click.
gv_string = 'link click node key:'
&& node_key && 'item name:' && item_name.
MESSAGE gv_string TYPE 'I'.
ENDMETHOD.
METHOD:m_checkbox_change.
gv_string = 'checkbox change node key:'
&& node_key && 'item name:' && item_name.
MESSAGE gv_string TYPE 'I'.
ENDMETHOD.
ENDCLASS.
CLASS c8_column_tree DEFINITION.
PUBLIC SECTION.
DATA:lo_col_tree TYPE REF TO cl_gui_column_tree.
DATA:ls_header TYPE treev_hhdr.
METHODS:m_init_tree.
METHODS:m_creat_col.
METHODS:m_creat_node.
METHODS:m_regist_event.
ENDCLASS.
CLASS c8_column_tree IMPLEMENTATION.
METHOD:m_init_tree.
ls_header-heading = 'heading'.
ls_header-width = 30.
ls_header-tooltip = 'this header'.
ls_header-t_image = '@B1@'.
"创建tree
CREATE OBJECT lo_col_tree
EXPORTING
parent = cl_gui_container=>default_screen
node_selection_mode = cl_gui_column_tree=>node_sel_mode_single
item_selection = 'X'
hierarchy_column_name = 'Col1'
hierarchy_header = ls_header.
"创建column
me->m_creat_col( ).
"创建node
me->m_creat_node( ).
"注册事件
me->m_regist_event( ).
ENDMETHOD.
METHOD:m_creat_col.
"添加列
lo_col_tree->add_column(
EXPORTING
name = 'Col2'
alignment = cl_gui_column_tree=>align_right
width = 20
header_image = '@B1@'
header_text = 'Column2'
header_tooltip = 'this column2'
).
"插入列
lo_col_tree->insert_column(
EXPORTING
name = 'Col3'
predecessor_column = 'Col2'
width = 20
header_image = '@B2@'
header_text = 'Column3'
header_tooltip = 'this column3'
).
"删除列
"delete_column
"更新列
"update_column
ENDMETHOD.
METHOD m_creat_node.
DATA:lt_node TYPE treev_ntab.
DATA:ls_node TYPE treev_node.
DATA:lt_item TYPE TABLE OF mtreeitm.
DATA:ls_item TYPE mtreeitm.
"添加节点
ls_node-node_key = 'Root'.
ls_node-isfolder = 'X'.
ls_node-n_image = '@FO@'.
ls_node-exp_image = '@W5@'.
ls_node-hidden = ''.
ls_node-disabled = ''.
APPEND ls_node TO lt_node.
CLEAR ls_node.
ls_node-node_key = 'Item1'.
ls_node-relatkey = 'Root'.
ls_node-relatship = cl_gui_column_tree=>relat_last_child.
ls_node-isfolder = 'X'.
ls_node-expander = 'X'.
ls_node-n_image = '@FO@'.
ls_node-exp_image = '@W5@'.
APPEND ls_node TO lt_node.
"设置column item
ls_item-node_key = 'Root'.
ls_item-item_name = 'Col1'.
ls_item-class = cl_gui_column_tree=>item_class_text.
ls_item-text = 'Root->col1'.
APPEND ls_item TO lt_item.
ls_item-node_key = 'Root'.
ls_item-item_name = 'Col2'.
ls_item-class = cl_gui_column_tree=>item_class_button.
ls_item-text = 'Root->col2'.
APPEND ls_item TO lt_item.
ls_item-node_key = 'Root'.
ls_item-item_name = 'Col3'.
ls_item-class = cl_gui_column_tree=>item_class_link.
ls_item-text = 'Root->col3'.
APPEND ls_item TO lt_item.
ls_item-node_key = 'Item1'.
ls_item-item_name = 'Col1'.
ls_item-class = cl_gui_column_tree=>item_class_text.
ls_item-text = 'Item1->col1'.
APPEND ls_item TO lt_item.
ls_item-node_key = 'Item1'.
ls_item-item_name = 'Col2'.
ls_item-class = cl_gui_column_tree=>item_class_button.
ls_item-text = 'Item1->col2'.
APPEND ls_item TO lt_item.
ls_item-node_key = 'Item1'.
ls_item-item_name = 'Col3'.
ls_item-editable = 'X'.
ls_item-class = cl_gui_column_tree=>item_class_checkbox.
ls_item-text = 'Item1->col3'.
APPEND ls_item TO lt_item.
lo_col_tree->add_nodes_and_items(
EXPORTING
node_table = lt_node
item_table = lt_item
item_table_structure_name = 'MTREEITM'
).
ENDMETHOD.
METHOD m_regist_event.
DATA:lt_events TYPE cntl_simple_events.
DATA:ls_events TYPE cntl_simple_event.
ls_events-eventid = cl_gui_column_tree=>eventid_node_double_click.
ls_events-appl_event = ''.
APPEND ls_events TO lt_events.
ls_events-eventid = cl_gui_column_tree=>eventid_header_click.
ls_events-appl_event = ''.
APPEND ls_events TO lt_events.
ls_events-eventid = cl_gui_column_tree=>eventid_expand_no_children.
ls_events-appl_event = ''.
APPEND ls_events TO lt_events.
ls_events-eventid = cl_gui_column_tree=>eventid_item_double_click.
ls_events-appl_event = ''.
APPEND ls_events TO lt_events.
ls_events-eventid = cl_gui_column_tree=>eventid_button_click.
ls_events-appl_event = ''.
APPEND ls_events TO lt_events.
ls_events-eventid = cl_gui_column_tree=>eventid_link_click.
ls_events-appl_event = ''.
APPEND ls_events TO lt_events.
ls_events-eventid = cl_gui_column_tree=>eventid_checkbox_change.
ls_events-appl_event = ''.
APPEND ls_events TO lt_events.
"设置事件
lo_col_tree->set_registered_events(
events = lt_events
).
SET HANDLER c8_event_handler=>m_node_double_click FOR lo_col_tree.
SET HANDLER c8_event_handler=>m_header_click FOR lo_col_tree.
SET HANDLER c8_event_handler=>m_expand_no_children FOR lo_col_tree.
SET HANDLER c8_event_handler=>m_item_double_click FOR lo_col_tree.
SET HANDLER c8_event_handler=>m_button_click FOR lo_col_tree.
SET HANDLER c8_event_handler=>m_link_click FOR lo_col_tree.
SET HANDLER c8_event_handler=>m_checkbox_change FOR lo_col_tree.
ENDMETHOD.
ENDCLASS.
示例:节点上右键菜单
1.创建对应事件响应方法
CLASS-METHODS:m_node_context_menu_request FOR EVENT node_context_menu_request OF cl_gui_simple_tree
IMPORTING node_key menu.
CLASS-METHODS:m_node_context_menu_select FOR EVENT node_context_menu_select OF cl_gui_simple_tree
IMPORTING node_key fcode.
2.方法实现
"创建menu
METHOD m_node_context_menu_request.
DATA:lo_menu TYPE REF TO cl_ctmenu.
CREATE OBJECT lo_menu.
lo_menu->add_function(
EXPORTING
fcode = 'FUNC1'
text = 'function 1'
icon = '@B1@'
).
lo_menu->add_function(
EXPORTING
fcode = 'FUNC2'
text = 'function 2'
icon = '@B1@'
).
menu->add_function(
EXPORTING
fcode = 'FUNC'
text = 'function'
icon = '@B3@'
).
menu->add_submenu(
EXPORTING
menu = lo_menu
text = 'menu1'
icon = '@B2@'
).
ENDMETHOD.
METHOD m_node_context_menu_select.
DATA:lv_str TYPE string.
lv_str = 'node_key:' && node_key
&& 'function:' && fcode.
MESSAGE lv_str TYPE 'I'.
ENDMETHOD.
3.注册事件,以及设置handler
ls_events-eventid = cl_gui_column_tree=>eventid_node_context_menu_req.
ls_events-appl_event = ''.
APPEND ls_events TO lt_events.
"设置事件
lo_simple_tree->set_registered_events(
events = lt_events
).
设置事件Handler
SET HANDLER c8_event_handler=>m_node_context_menu_request FOR lo_simple_tree.
SET HANDLER c8_event_handler=>m_node_context_menu_select FOR lo_simple_tree.