Controls.IndexOf(myControl) will give the index of any control in the collection. What exactly is the problem with this?
And also, you said you didn't want to bother with a hash table, but from what I can see it would simplify your situation. You could add all your controls to it like this:
Hashtable h = new Hashtable();
foreach (Control c in Controls)
{
h.Add(c.Name, c);
}
// You can now access your controls directly by name:
((Control) h["mycontrol1"]).Text = "blah";
Dim h As New Hashtable()
Dim c As Control
For Each c In Controls
h.Add(c.Name, c)
Next
'You can now access your controls directly by name:
DirectCast(h("mycontrol1"), Control).Text = "blah"