Sample Code for Creating Multiple-Selection GET List Box

Last reviewed: April 29, 1996
Article ID: Q104258
The information in this article applies to:
  • Microsoft Visual FoxPro for Windows, version 3.0
  • Microsoft FoxPro for MS-DOS, versions 2.0, 2.5, 2.5a
  • Microsoft FoxPro for Windows, versions 2.5, 2.5a

SUMMARY

FoxPro does not include a multiple-selection GET object that is activated with a READ command. However, you can create a multiple-selection list object by storing the information that is selected in the VALID clause for the list object, as explained below.

MORE INFORMATION

There are several different methods of creating a multiple-selection list object. The following example demonstrates how to make selections in an array. (In the example, the array is called "test".) The selections are marked by a check mark [CHR(251)], and then the selection is displayed when the Done button is chosen. The VALID routine for the push button sorts the array and stores the selected options in a variable. All options that were selected are stored in the "checked" variable.

Notes

  • If you use a two-column array, most statements in this code need to refer to TEST[i,1] if the information you want is in the first column.
  • Under Windows, you must use the FoxPro for Windows font. The default font for a list box is MS Sans Serif, which does not display a check mark for CHR(251).

    CLOSE DATABASE CLEAR

    USE tutorial\customer *** Create array test to store the field CNO from database COPY TO ARRAY test FIELDS cno *** Store a space as the first character of every element of the *** array. FOR i = 1 TO ALEN(test)

          test(i) = " " + test(i)
    
    ENDFOR *** Initialize variables
       selected = 0       && Variable to store number of selected items
       checked = " "      && Variable to store selected items
    
       DEFINE WINDOW test FROM 0,0 TO 17,20 TITLE "Test Application"
       MOVE WINDOW test CENTER
       ACTIVATE WINDOW test
       @ 2,2 GET choice FROM test DEFAULT 1 SIZE 10,10 ;
          VALID myval()
       @ 14,2 GET button PICTURE "@* Done" VALID done() DEFAULT 1
       READ CYCLE
       RELEASE WINDOW test
    
       *** VALID procedure for list box
       PROCEDURE myval
          *** Test to see if item has been selected by checking first
          *** character
          IF SUBSTR(test(choice),1,1) = " "
             *** Store check mark as first character of array element
             *** when item is selected.
             test(choice) = CHR(251) + SUBSTR(test(choice),2)
             *** Increment number of items selected
             selected = selected + 1
          ELSE
             *** Store a space as first character of array element
             *** to unselect item.
             test(choice) = " " + SUBSTR(test(choice),2,LEN(test(choice))-1)
             *** Decrement number if items selected
             selected = selected - 1
          ENDIF
          *** Reset current object to list box
          _CUROBJ = OBJNUM(choice)
    
       *** VALID procedure for Done push button
       PROCEDURE done
          *** Sort selected items to top if array
          result = ASORT(test,1,ALEN(test),1)
          *** Store selected items to variable "checked"
          FOR i = 1 to selected
          *** Substitute any desired code to store selected options
              checked = SUBSTR(test(i),2) + " " + checked
          ENDFOR
          RELEASE test
          *** Display selected options
          WAIT WINDOW "You selected " + checked
          CLEAR READ
    


Additional reference words: VFoxWin 3.00 FoxDos FoxWin 2.00 2.50 2.50a list
popup multi
select
multi-select multiselect multiseletion
KBCategory: kbprg kbcode
KBSubcategory: FxprgGeneral


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: April 29, 1996
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.