I have often used an ArrayList to store the names of all the controls I create dynamically. This works well if I just want to know if a control exists.
More recently, I've switched to using a table, as I can also store the name of the control's parent (form, panel, etc), type, and other stuff I might want to keep track of.
Naturally, it's a simple matter to add an item to an array list - or a row to a table - when a control is created, and to remove it when a control is disposed of.
Gary