Diskuze: c# form - generování komponent v kódu
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 8 zpráv z 8.
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.


http://www.itnetwork.cz/…indows-forms
a na přidávání kontrolek používám:
Controls.add(kontrolka);
ale nevím jestli jsem tě správně pochopil
uděláš si metodu (ve formu)
private static IEnumerable<T> GetChildrenOfType<T>(Control parent) where T : Control
{
foreach (var control in parent.Controls)
{
if (control is T)
{
yield return control as T;
}
}
}
která se dá pomocí LINQ zkrátit na:
private static IEnumerable<T> GetChildrenOfType<T>(Control parent) where T:Control
{
return parent.Controls.Cast<Control>().Where(c => c is T).Cast<T>().ToList();
}
Dělá to úplně to samé. Pokud tomu nerozumíš, buď to ber jako
blackbox, nebo si nastuduj generiku a LINQ.
A použiješ to takto:
List<ComboBox> boxes = GetChildrenOfType<ComboBox>(tabControl1.TabPages[i]).ToList();//všechny comboboxy, co jsou přímo obsažené v TabPage
Jinak pokud se ptáš, proč vracím IEnumerable a ne List, dalo by se
říct, že jde víceméně o konvenci.
Metody jsou statické kvůli tomu, že nepracují s instančními proměnnými,
proto je vhodné je označit jako statické kvůli čitelnosti kódu 
Ahoj, díky za odpověď.
Kód moc nechápu
Nešlo by to
udělat jednodušeji?? Potřebuji z každého comboboxu ze všech záložek
tabcontrol uložit do nějakého listu hodnotu SelectedItem...
Jinak mi to moc nefunguje. Použil jsem to takhle, viz. kód níže. Dotoho
listu boxes se sice uloží combobox (a jeho všechny parametry, jestli jsem to
dobře pohopil), ale při dalším průběhu cyklu se mi hodnota přepíše,
nemělo by tam být Add()?
private static IEnumerable<T> GetChildrenOfType<T>(Control parent) where T : Control
{
foreach (var control in parent.Controls)
{
if (control is T)
{
yield return control as T;
}
}
}
private void button1_Click(object sender, EventArgs e)
{
for(int i = 0; i < tabControl1.TabPages.Count ; i++)
{
List<ComboBox> boxes = GetChildrenOfType<ComboBox>(tabControl1.TabPages[i]).ToList(); //všechny comboboxy, co jsou přímo obsažené v TabPage
}
}
Možná bych měl trochu lépe vysvětlit, co ten kód dělá. Předáš mu
kontrolku, ve které jsou obsažené ty comboboxy.
To, co jsem napsal je univerzální, dá se to použít třeba na tlačítka
panely, všechno. Proto to používá generiku- vše ohledně T a <T>
Pokud bych tu metodu přepsal bez generiky čistě pro comboboxy a zjednodušil,
vypadala by takto:
private static List<Combobox> GetComboBoxes(Control parent)
{
List<Combobox> result=new List<Combobox>();
foreach (var control in parent.Controls)
{
if (control is Combobox)
{
result.Add(control as Combobox);
}
}
result result;
}
A použiješ ji takto:
List<Combobox> allCombos=new List<Combobox>(); //sem se načtou všechny comboboxy ze všech TabPage
foreach (var tab in tabControl1.TabPages)
{
allCombos.AddRange(GetComboBoxes(tab));//načíst všechny, co jsou v dané tabPage
}
potom budeš mít v allCombos všechny comboboxy, které jsou obsažené v
"tabech" tabControl1. Potom to jen projedeš třeba foreach cyklem, kde si
zjistíš u každého comboboxu SelectedItem.
Pokud tohle není co chceš, zkus se vyjádřit nějak lépe, možná jsem tě
nepochopil.
Ahoj, díky za zjednodušení. Teď už je mi to srozumitelnější...
Jen teď když volám metodu: allCombos.AddRange(GetComboBoxes(tab));
tak mi toho vyhodí při kompilaci error: Argument 1: cannot convert from
'object' to 'System.Windows.Forms.Control' a nevím jak to přesně
přetypovat.
Tak se mi to podařilo přetypovat a vypadá to, že to funguje 
allCombos.AddRange(GetComboBoxes((Control) tab));//načíst všechny, co jsou v dané tabPage
Zobrazeno 8 zpráv z 8.