Question:
When a user selects a value from a list box, I populate the contents of a
repeater. I also want to set the focus into the repeater's first field.
How can I accomplish this?
Answer:
You're probably running into this problem: Fields in a repeater can only be
referenced by an aggregate function. You're getting this message because
you're using the name of the field in the repeater in your Oracle Basic code.
When OPO makes a repeater, it creates an array of each field in the
repeater. If you simply use the Name property, you will be unable to
reference a single instance of the field. However, each field is a separate
window object. If you can get the window handle of the object, you can
reference it directly.
You can do this by adding a user-defined property called
udpField with a data type of "Object" to the form,
frmMain, that the repeater is in. In the OnLoad()
method of the first field of the repeater, add the following code:
frmMain.udpField = Self
This will cause the udpField property to be set each time a new
instance of the field in the repeater is created, so the property will end
up with the handle of the first field in the last row of the repeater. To
set the value of the udpField property to the window handle of
the field's first instance, change the code to:
IF ISNULL(frmMain.udpField) THEN frmMain.udpField = Self
The udpField property now has the window handle of the first
field in the first row of the repeater. You can use this code:
udpField.SetFocus()
to set the focus to the first field of the first row in the repeater.