Dobrý den Udělal jsem si proceduru, kam do argumentu dám promennou typu Form. Účel procedury: Zavolám ji a do argumentu dám volající form. Pak projíždím všechny kontroly (Controls) a upravuji jejich nastavení (přidávám handlery, obrázky atd.), a tím mi to pro aplikaci vytvoří příjemné GUI (obrázky se mění, když myš najede na button atd.)
public void do_graphics(Form f)
{
foreach (Control cont in f.Controls)
{
if(cont is ListView)
{
}
//atd atd
}
}
Problém: Když narazím na Panel (ci jiný control, který může mít v sobě další controly), chci i pro ně získat stejné nastavení. Nejdříve mne napadla rekurze, ale protože jsem do procedury dával promennou typu Form, nemůžu dát do argumentu Control. Nakonec jsem proceduru přetížil (jedna s argumentem pro form a druhá pro Control), ale protože jedna procedura má asi 100 + řádků, a i pro to, že kdybych v jedné něco změnil, musel bych to změnit i v té druhé, jsem toto řešení také zavrhl Napadlo mne dát do argumentu Objekt. Ale ve foreach mne to psalo chybu, protože u objektu nemůže zjistit controls, I když jsem to převedl na form nebo Control. Zkoušel jsem i var.
public void do_graphics(Object o)
{
foreach (Control cont in ((o.GetType())o).Controls)
{
}
}
Nevíte někdo nějaký inteligentní řešení? Děkuju za případné odpovědi.
|