Diskuze: Odkládací prostor v C#
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 19 zpráv z 19.
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.
Veřejným proměnným se snaž vyhnout, pokud to jde.
To co hledáš je asi klíčové slovo static .
Ve VB.NET jsem si do toho uložil např
Dim email As String
a pak jsem to mohl použít kdekoliv a nemusel jsem to v každém formu znovu deklarovat...
třeba takhle:
internal static class Spolecne
{
public const String Email = "[email protected]";
...
}
a pak třeba výpis do konzole by byl takhle:
Console.Write(Spolecne.Email);
takhle by to šlo, ale mě šlo spíš o to, abych si tu "proměnnou" mohl
plnit z nějakého formu, třeba z textboxu a pak to použít v druhém formu
jako "vstup"...
Doufám, že jsem to napsal tak, aby se to dalo pochopit... 
Když by jsi tu proměnnou chtěl měnit, tak stačí jen odebrat to slůvko const a můžeš ji měnit.
Ale v případě, co popisuješ, by bylo správné řešení ty data předávat přímo tomu druhému formuláři - ideálně v konstruktoru (pokud ten druhý formulář je teprve vytvářen) a nebo funkcí, pokud už existuje.
V podstatě mi jde taky o toto:
Mám form (např.: SeznamForm), v něm je DataGridView s daty z databáze a v
druhém formu (např.: DetailForm) jsou jednotlivé textboxy, které jsou
plněny daty z toho SeznamForm(z DGV), abych data mohl editovat. Jak toto
provedu v C#?
Ve VB.NET jsem se jednoduše v DetailForm odkázal na SeznamForm.DataGridView
a vybraný řádek, ale v C# toto takhle nefunguje...
Zkoušel jsem to právě přes nějakou proměnnou, která by se plnila podle
toho, který záznam bych vybral, ale to taky neumim.
Už jsem z toho srnec, daněk, jelen... 
Máš dvě možnosti - jednodušší, ale z pohledu OOP prasárna je, že vlezeš do SeznamForm.Designer.cs a ten DGV si nastavíš na public (případně i static, pokud v DetailFormu na tu instanci SeznaFormu nevidíš).
Ta správná je, že pokud DetailForm teprv vytváříš, tak mu do konstruktoru přidáš parametr toho řádku z DGV - předpokládám, že je to asi typ DataGridViewRow) a ten pak v tom konstruktoru zpracuješ.
Případně pokud ten DetailForm má umět i mazání/vytváření apod., tak si můžeš předávat do DetailFormu celý GridView.
Radši bych použil ten správný způsob, mohl bys prosím uvést nějaký
příklad toho správného zápisu? Jak "předat" do DetailFormu celý DGV?
Teoreticky vím, jak by to mělo systémově fungovat, ale prakticky vůbec
netuším, jak to napsat...
Edit:
Chtěl bych, abych po vybrání řádku a stisknutí tlačítka viděl v
DetailForm jednotlivé položky vybraného řádku...
Veřejné proměné by se v programu neměli vůbec vyskytovat, vždy by měli být dostupné jen přes metody. Případně u vlastností jen přes gettery a settery.
Nezkoušel jsem to, takže tam může být nějaký překlep nebo se nějaká
funkce může jmenovat trochu jinak, ale snad to z toho půjde pochopit 
DetailForm:
Vytvoř si DetailForm, naházej si na něj ty controly pro výpis těch
různých položek a konstruktoru přidej parametr typu DataGridViewRow nebo jak
se jmenuje.
Ještě do toho DetailFormu přidej proměnnou, kde si budeš udržovat ten řádek - třeba něco jako
private DataGridViewRow data = null;
a v tom konstruktoru mu přiřaď to, co ti přišlo v tom parametru.
public DetailForm(DataGridViewRow dataRow)
{
this.data = dataRow
}
Pak tam ještě připiš kód, co ti to z toho DataGridViewRow data načte do těch controlů - ideálně asi do eventu OnLoad.
Pak si obsluž tlačítko na uložení těch dat - aby to zase všechny změny uložilo do toho data a tlačítko storno, co jen ten formulář zavře (případně se předtím ještě zeptá, jestli nechce uložit změny).
SeznamForm:
při kliku na Editovat (nebo jak to tam máš)
DetailForm f = new DetailForm(mujDataGridView.SelectedRows[0]); // zavola konstruktor detailformu a jako parametr mu preda vybrany radek
f.ShowDialog();
Module je statická třída
Module Nazev
Public Dim x = 5
End Module
static class {
public static int x = 5;
}
a ten
static class {
public static int x = 5;
}
mám dát do čeho?
Našel jsem tam něco jako module (aspoň si to myslím) "CodeFile.cs", ale
nevím, jestli je to ono...
No dáš to jak u modulu do stejnojmenného souboru s příponou cs.
Hurááááá, konečně jsem pochopil (já patupák), jak se v C#
předávají hodnoty z jednoho formu do druhého... Juchůůůůůů 
Jak jsi to nakonec udělal? Přes konstruktor nebo prasácky? 
Konečně jsem pochopil, jak to funguje přes ten konstruktor, kam co napsat,
takže přes konstruktor...
Dííííííííííííííííííky 
Zobrazeno 19 zpráv z 19.