1. You could add a -browsecmd callback to your BrowseEntry constructor, add use it to check that the entered value exists in the list, else delete it or otherwise give some error message. (Since the docs dont say, just experiement with this callback to see what it passes you, by running a
print "@_\n"; at the top of it).
You would probably be better off using a ListBox though.
2. The elements that can be bound to are listed in the Tk::bind documentation.
C.