Page History
&<img src="../resources/images/opentocr.png" title="Open Contents list" border="0"&>
You are here:
...
Unlike an array, a keyed collection does not have to be keyed by an index. This example is otherwise the same as Example 1 except that the collection of employees is keyed by the #Surname field instead of a number.
When you type in an employee name and click on the Save button, the employee name is saved in a collection.
When you click on the Show button, all employees entered in the collection are displayed in a message box.
The collection is uniquely keyed by #SurName so a duplicate name will update the existing item in the collection.
Define the Collection
The collection to store employee names is defined like this:
Define_Com Class(#Prim_kCol<#GiveName #SurName>) Name(#Employee)
...
- Using a Keyed Collection (PRIM_KCOL) as a keyed array.
- Define the keyed collection to be used to store employee names.
- The collection is named #Employee.
- It collects an employee's #GiveName (given or first name).
- It is uniquely keyed an employee's #SurName (last name or surname).
Define_Com Class(#Prim_kCol<#GiveName #SurName>) Name(#Employee) - Define the form.
- Field #GIVENAME allows the employee's given/first name to be input.
- Field #SURNAME allows the employee's last or surname to be input.
- Button #PHBN_SAVE saves employee names into the collection.
- Button #PHBN_SHOW shows the details of all the employees in the collection.
Define_Com Class(#GiveName.Visual) Name(#GiveName) Displayposition(2) Height(19) Left(16) Parent(#COM_OWNER) Tabposition(1) Top(16) Width(329)
Define_Com Class(#SurName.Visual) Name(#SurName) Displayposition(1) Height(19) Left(16) Parent(#COM_OWNER) Tabposition(2) Top(40) Width(329)
Define_Com Class(#PRIM_PHBN) Name(#PHBN_SAVE) Buttondefault(True) Caption('Save ') Displayposition(3) Left(152) Parent(#COM_OWNER) Tabposition(3) Top(80) Width(97)
Define_Com Class(#PRIM_PHBN) Name(#PHBN_SHOW) Caption('Show ') Displayposition(4) Left(264) Parent(#COM_OWNER) Tabposition(4) Top(80) - -------------------------------------------------------------------------
- #PHBN_SAVE.Click : Save the detail on an employee in the keyed collection
- -------------------------------------------------------------------------
Evtroutine Handling(#PHBN_SAVE.Click) - Save the employee's name into the keyed collection.
- The collection is uniquely keyed by #SurName so a duplicate
- name will update the existing item in the collection. Try putting
- in 2 employees with the same surname (eg: JONES).
Set Com(#Employee<#SurName>) Value(#GiveName) - Clear the name fields ready for input of the next name
- and reset the focus to the first name field
Change Field(#GIVENAME #SURNAME) To(*NULL)
Invoke Method(#GiveName.SetFocus)
Endroutine - -------------------------------------------------------------
- #PHBN_SHOW.Click : Build a message of all the employees saved
- -------------------------------------------------------------
Evtroutine Handling(#PHBN_SHOW.Click) - Iterate through the collection referencing each entry in the
- collection as an object by using a for / end for loop.
For Each(#Employee_GiveName) In(#Employee) Key(#Employee_SurName)
Use Builtin(MESSAGE_BOX_ADD) With_Args('Employee' #EMPLOYEE_GIVENAME.VALUE #EMPLOYEE_SURNAME.VALUE 'was found in the collection.')
Endfor - Show the employee count and final results
Use Builtin(MESSAGE_BOX_ADD) With_Args('There are' #EMPLOYEE.ITEMCOUNT 'employees currently in the collection.')
Use Builtin(MESSAGE_BOX_SHOW) With_Args(OK OK INFO *COMPONENT)
Endroutine
End_Com
Example 2: Collections do not Need to Be Keyed by Index
&<img src="../resources/images/opentoc-dark.png" title="Open Contents List" border="0"&>