Combobox with an array that gets lengthened

I've got a combobox with the RowSourceType property set to 5, to use an array.

The last row in the array contains an entry "new". Selecting this allows you to add an extra entry into the list.

Except that once I've added the new entry, I lose the "new" entry at the end of the list.

I think that what's happening is that when I first set up the combobox, VFP works out that it has (say) 200 rows. Adding the extra row means that the array now has 201 rows, with "new" in the 201st row. But VFP still thinks that the array has 200 rows.

I've looked through the object's properties using DEBUG, but the only obvious property is .LISTCOUNT, which is read-only.

Is there another property that I should have incremented in some way?
Who is Participating?
pcelbaConnect With a Mentor Commented:
AddItem does not help here.

If you change the RowSource array dimension you have to call Combo's Requery method to update the number of displayed options.

Following code works in Combo's Valid event (macro substitutions are there just for testing puproses):
  IF .Value = '<New>' AND .RowSourceType = 5
    lcSource = .RowSource
    &lcSource[ALEN(&lcSource)] = 'New opt ' + TIME()
    DIMENSION &lcSource[ALEN(&lcSource)+1]
    &lcSource[ALEN(&lcSource)] = '<New>'
    WAIT WINDOW "Combo selection: " + .Value NOWAIT

Open in new window

Olaf DoschkeSoftware DeveloperCommented:
I don't know from the top of my head, but perhaps VFP indeed copies the array you specify to it's own List() array, try adding to it with additem().

Otherwise a cursor may be the easier rowsource in that case, new records in a cursor will be reflected in the combobox right away.

Bye, Olaf.
IainMacbAuthor Commented:
REQUERY() method does the trick. Excellent!

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.