Diskuze: Hromadná změna pozadí u více labelů
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 12 zpráv z 12.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zjistil jsem, že když ten cyklus foreach dám na tlačítko místo na
událost load a pak když na to tlačítko několikrát kliknu, tak po každém
kliknutí se zprůhlední pozadí u poloviny labelů z celkového počtu, kde
pozadí průhledné není. Takže když mám 16 labelů, tak po prvním
kliknutí se jich zprůhlední 8, po druhém kliknutí zbydou neprůhledné 4,
po dalším kliknutí se zprůhlední další 2, po dalším kliknutí zbyde už
jen jeden a nakonec je průhledné pozadí u všech labelů.
Proč se tohle děje?
Teď mě akorát napadá
foreach(Label lbl in this.Controls)
lbl.BackColor = Color.Transparent;
A jinak se to asi děje tím cyklem, když jsem si to zkusil s 5 Labely krokovat, tak se ten cyklus provedl jen 3krát; (Hrozně mě to připomíná situaci, když se maže z Listu od první položky, pak se posouvá pořadí položek a když to není ošetřeno, tak to přeskakuje podobně).
Zirko:
To mi nějak nefunguje vůbec.
rwn:
Dal jsem to do událoti pictureBox_Paint a ono to funguje. Jiné pozicování mi
nevadí. Neni to ale moc dobré řešení, protože zrovna tuhle událost
vyvolávám celkem často (každých 25ms) na základě časovače, protože tam
mám už jiný kod (Graphics.DrawImage). Prostě to ten cyklus ve výsledku
zpomaluje. Tak mě napadlo dát to do podmínky dotazované na pomocnou
proměnnou a po projetí cyklu změnit stav pomocné proměnné, takže díky
tomu cyklus projede jen jednou. A jsem tam, kde jsem byl. Když nechám cyklus
projet vícekrát, tak to má stejný efekt, jako jsem výše popisoval to
klikání na tlačítko. Takže když ten cyklus foreach nechám projet asi 4x
tak je výsledek dobrý, ale i tak mi to trošku zpomaluje tu aplikaci.
Zatím jsem to vyřešil tak, že ten původní cyklus foreach (ten, co je v mém prvním příspěvku) jsem dal do cyklu for, který proběhne 4x a to celé je dané v události Form1_load. Takže takhle mi to funguje, ale nevím, jak si to odůvodnit. Nevím proč to pokaždé změní požadované vlastnosti jen u poloviny prvků (kontrolek).
Můžeš někde upnout ten projekt? Nechce se mi to simulovat tak nato kouknu přímo.
V poznámce tam je ten cyklus for, se kterým mi to funguje. Není to ale
nejlepší řešení, i když pro tuto aplikaci asi dostačující. Hlavně by
mě zajímal důvod, proč ten cyklus foreach provede požadovanou operaci vždy
jen pro polovinu kontrolek. 
foreach (Control ctrl in this.Controls.Cast<Control>().ToList())
{
...
}
Jde o to, že když nastavíš Parent každému controlu, tak zmizne z té kolekce, takže pokaždé když nastavíš Parent tomu kontrolu, tak máš počet - 1, pak to zblbne ten enumerátor a proiteruje jen část. Takže si je takhle uložíš napevno do kolekce a iteruješ jí a je jedno k jaké kontrolce patří.
Jinak všechno tohle bys nemusel řešit, kdybys použil panel, který je přesně na tyhle věci (skládání kontrolek do nečeho). Ty třeba ještě nemusíš řešit to, že to máš přes celý form, ale jakmile bys měl ten picturebox třeba jen poloviční, musel bys přepočítávat lokaci apod. takže to změn na Panel a budeš to mít lehčí.
Zobrazeno 12 zpráv z 12.