Diskuze: Passovani promennych mezi bezicimi Formy
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.


Ty data co si přepíšeš a pošleš zpátky, jsou uložená v Listu? nebo to máš data jen jako private proměnné v prvním formu?
Tak můžeš to udělat třeba tak, že si ve Formu2 uděláš metodu, která
bude vracet string popřípadě int té nové hodnoty.
Potom ve Form1 budeš jen volat onu metodu, co ti vrátí hodnotu z Form2
matchWindow duel = new matchWindow();
charName = duel.MetodaVracejiciNovyCharName();
health = dual.MetodaVracejiciNovyHealrt();
duel.ShowDialog();
Přičemž ony metody ve Form2 mohou vypadat třeba takto:
public int duel_hp()
{
duel_hp += 5; //nějaká změna
return duel_hp;
}
A hodnoty co si posíláš do Form2, tak si to pošli spíš takto:
matchWindow duel = new matchWindow(charName, health);
Přičemž ve form2 budeš takto brát parametry:
private string duel_charname;
private int passed_duel_hp;
public matchWindow(string charName, int health)
{
InitializeComponent();
this.duel_charname = charName;
this.passed_duel_hp = health;
}
Snad je to zrozumitelné. 
Tímto způsobem se dá zeptat na jakýkoliv parametr ve form2, který se ti následně uloží do proměnné health
health = dual.MetodaVracejiciNovyHealrt();
Jinak jsem tam měl překlep, ten název metody by měl být:
public int MetodaVracejiciNovyHealrt()
{
duel_hp += 5; //nějaká změna
return duel_hp;
}
Aby název odpovídal volající metodě.
Tak teoreticky bys to mohl udělat obráceně. Před zavřením Form2 se zavolá metoda, která data z Form2 pošle do metody z Form1 a ta si je nastaví pro celý Form1.
Udělej si metodu ve Form1, která přepíše ony parametry ve Form1. Tahle
metoda, by se zavolala před zavřením Form2 a měla by v sobě parametry,
které chceš přepsat ve Form1.
Zkus si možná pročíst nějaké tutoriály zde na stránkách. Metody jsou
úplný základ programování. 
Tak jsem to zkusil takhle, bohuzel bez vysledku, data ve Form1 se porad nemeni... Jdu na to spravne?
Form1
public int health_rewrite()
{
health = duel.hp_method();
return health;
}
Form2
public int hp_method()
{
output_charHp = char_hp;
return output_charHp;
}
public bool result_method()
{
output_result = result;
return output_result;
}
private void duel_backToGame_Click(object sender, EventArgs e)
{
this.Close();
}
private void matchWindow_FormClosing(object sender, FormClosingEventArgs e)
{
Form1 Form1 = new Form1();
Form1.health_rewrite();
}
Do konstruktoru Form2 si dej vstupni promenou typu Form a tou pak inicializuj deklarovany form1, pak můžeš pracovat s proměnýma z Form1
Nejak takto:
Form1 form1; // deklarace promene ve tride Form2
public Form2(Form form) //konstruktor Form2
{
form1 = form;
}
//form closing
private void matchWindow_FormClosing(object sender, FormClosingEventArgs e)
{
form1.health_rewrite();
}
no a kdyz si ve Form1 vztváříš proměnou
Form2 form2 = new Form2(this) // promena ve Form1
, dáš mu do konstruktoru vstupní hodnotu formulář Form1
Doufám, že je to pochopitelné 
Co takhle:
Form1
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
Form2 form2; // deklaruju promenou form2
public Form1() // konstruktor form1
{
InitializeComponent();
label1.Text = "Text"; // mam ve formu1 label s textem> "Text"
}
private void button1_Click(object sender, EventArgs e) // kdyz kliknu na tlacitko, inicializuju promenou form2 a zobrazim form2
{
form2 = new Form2(this);
form2.Show();
}
public void PrepisLabel(string text) // metoda pro prepsani textu v label1
{
label1.Text = text;
}
}
}
Form2
namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
Form1 form1;// deklaruju promenou form1
public Form2(Form1 form) // konstruktor Form2
{
InitializeComponent();
form1 = form; // inicializace form1
}
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
form1.PrepisLabel("Zavrel jsem form 2 a pracuju s promenou formu1"); //kdyz zaviram form2 volam metodu pro prepis labelu
}
}
}
Jesstli chces poslu ti tu ukazku 
Takze jsem to prozkousel a dopadl jsem takto: u eventu FormClosing volam metodu, ale chce to po me parametry. Zkusim jsem Form1.health_rewrite(char_hp);, podari se spustit ale ve vysledku spadne, protoze: "Odkaz na objekt není nastaven na instanci objektu."...
Musis mit deklarovany Form1 v konstruktoru Form2,
Zobrazeno 19 zpráv z 19.