

Jak se odkázat na button, když mám jeho jméno ve stringu (C#)
Zdravim, dělám si prográmek a narazil jsem na malý problém, nevím jak se odkázat na jednotlivé buttony pomocí jména, které mám uložené ve stringu.
Vypotil jsem ze sebe kód, viz níže. Bohužel nefunguje podle mých představ, abych byl přesnější nefunguje vůbec.
Button stisknutéTlačítko = (Button)sender;
btn1 = stisknutéTlačítko.Name;
Control tl1 = this.Controls[btn1];
tl1.ForeColor = Color.Black;
tl1.BackgroundImage = Properties.Resources.Sova;
A proč tak složitě?
Teď mě napadá, že jsem to měl upřesnit hned na začátku. Mám 8x8 tlačítek a po kliknutí se vždy uloží do proměnné jméno tlačítka. Po 3 kliknutí na libovolné tl. potřebuji provést změnu barvy a obrázku.
To na mé odpovědi ale nic nemění. Proč si do té proměnné neukládáš rovnou referenci na tlačítko?
Akorát jsem ještě chtěl dopsat, že všechny tlačítka musí mít stejný Event "Click"(u všech např. btn_klik).
Možná jen něco špatně chápu, ale myslím, že za této situace tento kód nefunguje, vždy po kliknutí se přepíše "stisknutéTlačítko", jestli se mýlím tak se omlouvám.
Pokud se to má provést až po třetím stisknutí, tak tam stejně nejdřív zvyšuješ nějaké počítadlo a potom to teprve provedeš, ne?
Ano, zvyšuji.
No tak nevím, kde vidíš problém.
To v C# sa polia indexuju podla stringov?
Controls[btn1] ??? WTF
http://stackoverflow.com/questions/3898588/find-co ntrol-by-name-from-windows-forms-controls
P.S. a uz ti Wikan napisal ze jak sa to robi spravne. Nemas tam vobec pracovat s nazvom.
Čerpal jsem odtud:
http://stackoverflow.com/questions/12969453/how-to -access-a-button-using-its-name-as-a-string-in-a-f or-loop
for(int i =1;i<25;i++)
{
this.Controls["bt"+ i.ToString()].Enable = True;
}
Dobre ked to ma ten class implementovane tak sa to da ale vobec to robit nepotrebujes, vobec nepracuj s nazvom.
V tej kolekcii this.Controls ten tvoj control trebars ani vobec nemusi byt.
Pokud je na tom formu, tak tam být musí.
Moze byt v podforme. Kdesi som to teraz videl ked som googlil ten podivny collection, ze to tam byt nemusi. (P.S. ale to len tak na okraj, ja zatial vobec nechapem ze co vlastne chce :D)
Čemu říkáš podform? MDI Child? Tak to tam nejspíš opravdu nebude, ale to bych ani nebral jako obsah hlavního formu.
Ja neviem vidis co tam ma za maglajz, a ziadny test na chyby / error navratove hodnoty / excepsny, dufam ze to robi len pre seba pre zabavu.
Omlouvám se, kód, který jsem napsal funguje, ale měl jsem pod tlačítky panel, na který jsem už dávno zapomněl (vrátil jsem se k tomu projektu po dlouhé době).
Stačilo změnit this. na panel1.
Děkuji za rady, zamykám.
Sice funguje, ale děláš to zbytečně složitě.