C# jak předávat objekty mezi dvěma windows forms?

Vývojová prostředí, aplikace, skripty, http://www... síťové programy, internet, sdílení...
Odpovědět
muliku
Začátečník
Začátečník
Uživatelský avatar
Registrován: 05. čer 2009

C# jak předávat objekty mezi dvěma windows forms?

Příspěvek od muliku »

Ahoj, mám menší problém. Snažím se programovat takovou malou bojovou hru. Při zapnutí aplikace si hráč vybere zbraň (každá má jiné atributy, jako útok, obrana, atd.). Po potvrzení výběru zbraně se vytvoří objekt hrac1, který má atributy hrac1.zivoty, hrac1.utok a hrac1.obrana, které jsou danné na základě výběru zbraně. Po vytvoření tohoto objektu se zavře okno na výběr zbraně (Form1) a otevře se okno nové, s vlastní hrou (Form2).
Samozřejmě ve Form2 potřebuji pracovat s objektem hrac1, ktery jsem si vytvoril ve Form1. Při zavření Form1 ale tento objekt zmizí. Jak mám udělat, aby se objekt zachoval v průběhu celého programu? Díky.

Můj kód:
Vytvoření hráče:

private void button1_Click(object sender, EventArgs e)
{
Hrac hrac1 = new Hrac(0, 0, 0);

if (z1.Checked == true)
{ hrac1.zivoty = 120;
hrac1.utok = 20;
hrac1.obrana = 20;

Form2 vytvor = new Form2();
vytvor.Show();
}
...............................
a odsud pak potřebuju hrac1 přesunout do Form2.
Central Processing Unit: Phenom II x4 965 BE Cooler: Scythe Ninja 3 Mother Board: Gigabyte AMD 890G Random Acces Memory: 2x2 Gb DDR III 1600MHz Kingston Graphic Processing Unit: nVidia GeForce GTX660 2Gb Power Suply Unit: Seasonic M12II-620 - 620W Hard Disk Drives: OCZ Agility 3 120GB, Seagate 1TB, Samsung F3 1Tb
marek16
Začátečník
Začátečník
Uživatelský avatar
Registrován: 22. čer 2006
Bydliště: Brno

Re: C# jak předávat objekty mezi dvěma windows forms?

Příspěvek od marek16 »

jednoduše, předej ho tomu druhýmu v konstruktoru:

class Form2
{
private Hrac Hrac;

public Form2(Hrac hrac)
{
this.Hrac = hrac;
}

}

a v prvním:
Form2 form = new Form2(hrac);

Další alternativa je udělat si public field/property a po vytvoreni toho druhyho formu ji jenom nastavit. (WF designer má tuším problém pokud nenajde bezparametrickej konstruktor formuláře, a jakmile uděláš parametrickej, ten bez už se automaticky negeneruje)
Ryzen 9800X3D | RTX 5080 16GB | 64GB DDR5 6000 CL30 | Gigabyte B650 Aero G | Samsung 990 PRO 2TB | LG BX 4K

Quis custodiet ipsos custodes?
muliku
Začátečník
Začátečník
Uživatelský avatar
Registrován: 05. čer 2009

Re: C# jak předávat objekty mezi dvěma windows forms?

Příspěvek od muliku »

Jééé já jsem hlupák :D tohle jsem právě zkoušel, ale nešlo to. Problém byl v tom, že class Hrac nebyla public
Central Processing Unit: Phenom II x4 965 BE Cooler: Scythe Ninja 3 Mother Board: Gigabyte AMD 890G Random Acces Memory: 2x2 Gb DDR III 1600MHz Kingston Graphic Processing Unit: nVidia GeForce GTX660 2Gb Power Suply Unit: Seasonic M12II-620 - 620W Hard Disk Drives: OCZ Agility 3 120GB, Seagate 1TB, Samsung F3 1Tb
marek16
Začátečník
Začátečník
Uživatelský avatar
Registrován: 22. čer 2006
Bydliště: Brno

Re: C# jak předávat objekty mezi dvěma windows forms?

Příspěvek od marek16 »

jinak taky jsem zkoušel psát nějakou hru ve winforms, ale ve finále je s tím strašlivá drbačka úplně zbytečně, mrkni na XNA framework, dost věcí to usnadňuje :) (pozor, nevýhoda je, že potřebuje Visual studio 10, nebo nainstalovanou desítku a pak se projekty otevřou i ve 12ce tuším, víc na stack overflow/googlu)
Ryzen 9800X3D | RTX 5080 16GB | 64GB DDR5 6000 CL30 | Gigabyte B650 Aero G | Samsung 990 PRO 2TB | LG BX 4K

Quis custodiet ipsos custodes?
muliku
Začátečník
Začátečník
Uživatelský avatar
Registrován: 05. čer 2009

Re: C# jak předávat objekty mezi dvěma windows forms?

Příspěvek od muliku »

Díky za tipy, ale já tohle nedělám pro vlastní potěchu, je to semestrálka do školy.
Central Processing Unit: Phenom II x4 965 BE Cooler: Scythe Ninja 3 Mother Board: Gigabyte AMD 890G Random Acces Memory: 2x2 Gb DDR III 1600MHz Kingston Graphic Processing Unit: nVidia GeForce GTX660 2Gb Power Suply Unit: Seasonic M12II-620 - 620W Hard Disk Drives: OCZ Agility 3 120GB, Seagate 1TB, Samsung F3 1Tb
xxar3s
Nováček
Nováček
Registrován: 09. črc 2008

Re: C# jak předávat objekty mezi dvěma windows forms?

Příspěvek od xxar3s »

Cez konstruktor, alebo cez property, ale ak nechces riesit zavislosti pouzi IoC kontainer. Sice ti to da na zaciatku trochu prace, ale potom sa uz nemusit o nic starat. Kontainer urobi vsetko za teba.
Odpovědět

Zpět na „Programování a web“