Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ibm midrange 如何使用AS400 DDS在窗口中创建单个选择列表?_Ibm Midrange - Fatal编程技术网

Ibm midrange 如何使用AS400 DDS在窗口中创建单个选择列表?

Ibm midrange 如何使用AS400 DDS在窗口中创建单个选择列表?,ibm-midrange,Ibm Midrange,事实上,我并不是在询问有关实施的细节。我知道如何在整个屏幕中使用子文件实现单个选择列表,但当我尝试将相同的原则应用于窗口时,事情并没有完全按照预期进行。以下是窗口和子文件的DDS: A R SWCCHK03 SFL A S0AVAL 1Y 0H SFLCHCCTL A S0OPTN 10A O A R SWCCHK04

事实上,我并不是在询问有关实施的细节。我知道如何在整个屏幕中使用子文件实现单个选择列表,但当我尝试将相同的原则应用于窗口时,事情并没有完全按照预期进行。以下是窗口和子文件的DDS:

A        R SWCCHK03                      SFL
A          S0AVAL        1Y  0H          SFLCHCCTL
A          S0OPTN       10A   O     
A        R SWCCHK04                      SFLCTL(SWCCHK03)
A                                        OVERLAY
A                                        SFLDSP
A                                        SFLDSPCTL
A 30                                     SFLCLR
A 31                                     SFLEND
A                                        SFLSIZ(0006)
A                                        SFLPAG(0005)
A                                        WINDOW(*DFT 13 32)
A                                        SFLSNGCHC(*RSTCSR *AUTOSLT)
A                                     1 3'Option'
以下是RPGLE中用于显示和处理所选选项的循环:

C      SR300      BEGSR
C      *IN12      DOWEQ      *OFF
C                 EXFMT      SWCCHK04
C      *IN12      IFEQ       *OFF
C                 GOTO       SR300E
C                 ENDIF
C                 READC      SWCCHK03
C      S0AVAL     IFEQ       4
C                 ITER
C                 ENDIF
                  .
                  .
                  .
C                 ENDDO
C      SR300E     ENDSR
在某些情况下,我想将S0AVAIL设置为4,这样单选列表中的某些选项将不可用,如果用户试图选择这样的选项,窗口和单一选择列表将保留在屏幕上,光标位于第一个选项上,直到用户选择退出窗口或选择可用选项


如果用户选择可用选项,则此实现没有问题。但是,如果用户选择了不可用的选项,窗口将根据需要保留在屏幕上,但光标将移动到窗口的左上角,而不是保留在选择列表中的第一个选项上。即使我可以手动将光标移回该选项,下次选择不可用选项时,它也会再次转到窗口角。这是怎么发生的?如何解决这个问题?

这段代码是如何编译的?在32列宽的窗口中有一个50列子文件字段(S0OPTN)。确保您正在运行您认为应该运行的代码

当我尝试类似的代码时,我无法选择S0AVAL=4的行。您如何“选择”一个不可用的选项?如果使用光标键,光标将跳过不可用的选择。如果我用鼠标点击,我会得到一个“禁止输入”的键盘错误。您使用的是什么终端仿真器?我正在使用适用于Windows的个人通信6.0

工作守则如下:

 A*
 A          R SWCCHK03                  SFL
 A            S0AVAL         1Y 0H      SFLCHCCTL
 A            S0OPTN        10A  O  6 11
 A*
 A          R SWCCHK04
 A                                      SFLCTL(SWCCHK03)
 A                                      OVERLAY
 A  27                                  SFLDSP
 A N28                                  SFLDSPCTL
 A  28                                  SFLCLR
 A  29                                  SFLEND
 A                                      SFLSIZ(06)
 A                                      SFLPAG(05)
 A                                      CF12(12)
 A                                      WINDOW(*DFT 13 32)
 A                                      SFLSNGCHC(*RSTCSR *AUTOSLT)
 A            SFLRRN         4S 0H      SFLRCDNBR(CURSOR)
 A                                  1 10'Title'
 A            CHOICE         4S 0   3  1
 A                                  4  5'Choose one'                               

 h/copy qrpglesrc,stdhspec
 h* dbgview(*list)

 fsotest    cf   e             workstn
 f                                     SFILE(SWCCHK03:RRN)

 c* clear sfl
 c                   z-add     1             sflrrn
 c                   setoff                                       272829
 c                   seton                                        28
 c                   write     SWCCHK04
 c                   setoff                                       28
 c* load sfl
 c     1             do        9             rrn               4 0
 c                   movel     rrn           s0optn
 c                   if        rrn = 4
 c                   z-add     4             s0aval
 c                   else
 c                   z-add     0             s0aval
 c                   endif
 c                   write     SWCCHK03
 c                   seton                                        27
 c                   enddo

 C     *IN12         DOWEQ     *OFF
 C                   EXFMT     SWCCHK04

 C     *IN12         IFEQ      *ON
 C                   LEAVE
 C                   ENDIF

 C                   READC     SWCCHK03                               80
 C  n80              do
 C                   movel     rrn           choice
 C                   z-add     0             S0aval
 C                   update    SWCCHK03
 C                   enddo
 C                   ENDDO

 c                   seton                                        lr

抱歉,S0OPTN的长度应为10个字符。我把它和另一个领域混在一起了。关于选择一个不可用的选项,不知何故,我把光标放在它上面没有问题。我正在使用适用于Windows的个人通信5.8。