Ne moras pisati za svaku grupu posebno, mozes i preko traversal algoritma kroz k-ary tree. Ovo ti je vise preporuka da krenes malo da proucavas neke osnovne algoritme i data structure (k-ary tree, binary tree, B tree... imas i ovde na ES-u u Art of programming).
Evo ti jedna od mene 'genericka' f-ja za kontrole
Code:
public static IEnumerable<Control> GetAllControls(Control.ControlCollection baseCollection)
{
Control.ControlCollection currentCollection = baseCollection;
Control currentControl = null;
int i = 0;
while (true)
{
// uzima se kontrola na i poziciji u trenutnoj kolekciji
currentControl = currentCollection[i];
// salje kontrolu pozivnom kodu
yield return currentControl;
if (currentControl.Controls.Count > 0)
{
// preusmerava se trenutna kolekcija ka kolekciji kontrola tenutne kontrole :)
currentCollection = currentControl.Controls;
i = 0;
continue;
}
// ukoliko je pozicija (i) sa koje se ucitava kontrole poslednja
check:
if (i == currentCollection.Count - 1)
{
// prvo se proverava da li je ovo prva kolekcija kontrola (kolekcija od koje se krenulo)
// ukoliko jeste izlazi se iz petlje jer smo dosli do kraja kontrola
if (currentCollection == baseCollection)
break;
// ukoliko nije, potrebno je vratiti proslu kolekciju i proslu kontrolu
currentCollection = currentControl.Parent.Parent.Controls;
currentControl = currentControl.Parent;
// zatim se nastavlja tamo gde se stalo u prosloj kolekciji
i = currentCollection.IndexOf(currentControl);
// ali pre toga se mora proci jos jednom kroz proveru,
// jer ovo moze biti zadnja kontrola u kolekciji
goto check;
}
i++;
}
}
Koristis tako sto prosledis
Code:
foreach (Control c in GetAllControls(myForm.Controls))
...
Za ovaj drugi deo oko izgleda koji spominjes, mislim da mislis na Application.EnableVisualStyles().