More than one object can have the same identifier, as long as the objects have different ancestry. For example, you might want to define two buttons, both named Control1. One is the child of Panel, and the other is the child of NewPanel. You might specify:
key Control1 at position 50 50 in Panel
box 20 20
key Control1 at position 100 10 in NewPanel
box 50 50
Thereafter, whenever one of the objects named Control1 is referenced in your ESL program, you must specify a name containing enough of the object's ancestry to distinguish it unambiguously from other objects.
For example:
make Control1 in Panel invisible
make Control1 in NewPanel invisible
But if you have defined only one Control1 you can specify:
make Control1 invisible
without specifying its ancestry.
Be careful that you do not accidentally delete objects that have children. If a parent object is deleted, you cannot reference any of its children, because when a parent is deleted, so are its children.
ESL can convert an object name with ancestry, such as PanicButton in Panel, to a string. You can change the ancestry of objects during runtime.