既然是屏幕设计器,自然要有下拉列表框。这里我们来做一下。
首先,SE38建立一个程序,SE51拖出一个文本框控件,下拉框的属性设置为Listbox,名称为VALUE:
再拖出一个文本框,设置为只读属性,如下:
屏幕设计页面如下:
屏幕设计属性的代码如下:
PROCESS ON VALUE-REQUEST. 代表定义调用F4帮助或者单击该栏位所触发的事件。
FIELD VALUE MODULE SETVALUE. 代表为下拉列表框赋值。
在SE38中,程序的开头记得Key入如下代码:
TYPE-POOLS: VRM. 这个是下拉列表框引用所要用到的。
接下来声明变量,与控件名称对应。
DATA:VALUE(10) TYPE C, "下拉框
DESC(10) TYPE C. "说明
START-OF-SELECTION.
CALL SCREEN 100. "载入画面
载入下拉列表框的MODULE:
MODULE SETVALUE INPUT.
DATA: LV_NAME TYPE VRM_ID,
LT_LIST TYPE VRM_VALUES,
LW_VALUE LIKE LINE OF LT_LIST.
CLEAR:LT_LIST,LW_VALUE.
LV_NAME = 'VALUE'.
"读取数据表内容至内表
SELECT VALUE INTO LW_VALUE-KEY FROM ZCODE_MSTR WHERE FIDNAME = 'LIST'.
LW_VALUE-TEXT = LW_VALUE-KEY.
APPEND LW_VALUE TO LT_LIST.
ENDSELECT.
CALL FUNCTION 'VRM_SET_VALUES' "调用函数填充内容
EXPORTING
ID = LV_NAME
VALUES = LT_LIST.
ENDMODULE. " SETVALUE INPUT
"根据下拉框内容的值进行读取相应的说明
FORM GETDESC .
SELECT CMMT INTO DESC FROM ZCODE_MSTR WHERE FIDNAME = 'LIST' AND VALUE = VALUE.
ENDSELECT.
ENDFORM. " GETDESC
"用户操作代码
MODULE USER_COMMAND_0100 INPUT.
CASE SY-UCOMM.
WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
LEAVE PROGRAM.
WHEN 'SAVE'. "显示下拉框的值
MESSAGE VALUE TYPE 'I'.
WHEN 'THELIST' OR 'ENTER'. "下拉列表框内容变更之后的动作
PERFORM GETDESC.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
ZCODE_MSTR内容如下:
最后,本程序运行结果如下:
程序做到了很好的互动,下拉列表框内容改变了之后,旁边的说明自动会抓去相应的内容显示。