IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar

Neregistrovaný
Avatar
:16.2.2014 3:18

Zdravím, mám List, do kterého si ukládám metodou umístěnou ve Form1(to funguje). Udělal jsem si jeden windows form k tomu - říkejme mu např. Form2, ze kterého bych chtěl také moci ukládat do stejného Listu. Tak si z něj volám instancí k méme Form1 na Tu metodu na ukládání do Listu, ale nic se neukládá - navíc mě to ani neukazuje položky v Listu uložené z Form1. V podstatě mě to připadá, že ať udělám cokoliv s Listem z Form2, tak to List nezajímá. Je to způsobeno tou instancí na Form1? Popřípadě, jak se to dá odstranit?

 
Odpovědět
16.2.2014 3:18
Avatar
Lako
Člen
Avatar
Odpovídá na
Lako:16.2.2014 9:51

A jak si ve form2 voláš ten list z form1?
Zřejmě si totiž vytváříš novou instanci Form1 a tam logicky bude List jiným objektem než se kterým pracuješ v původním Form1.
Při tvorbě Form2 můžeš předat do konstruktoru Form1, a nebo - e ještě lépe, tuhle logiku ukládání do listu udělat uplně někde jinde.

 
Nahoru Odpovědět
16.2.2014 9:51
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na
Petr Nymsa:16.2.2014 10:34

Uděláš si nějakou třídu, která bude obsluhovat data - nějaký manažer dat. Ten poté založíš ve Form1 a dle potřeby předáš do Form2.

Nahoru Odpovědět
16.2.2014 10:34
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar

Neregistrovaný
Avatar
:16.2.2014 13:43

Já si ve Form2 List nevolám, z Form2 si volám jen metodu ve Form1, která to pošle třídě kde se pracuje s položkami v Listu. Jak se předá do konstruktoru Formu2 Form1? Já mám vytvořenou instanci na třídu kde se provádí operace s Listem - tu mám umístěnou ve Form1, takže jsem myslel, že pro práci s tímto Listem musím všechno "tahat" přes Form1 přes zmíněnou instanci na operaci s položkama. Nebo to nějak špatně chápu? :)

 
Nahoru Odpovědět
16.2.2014 13:43
Avatar
Honza
Člen
Avatar
Honza:18.2.2014 8:51

Ahoj, hoď sem kousek kódu ať se na to můžeme mrknout :) Jde hlavně o to jak předáváš tu instanci formuláře a jestli to opravdu voláš na správné instanci.

Ale není to uplně správný přístup, z formuláře 2 bys neměl volat funkce formuláře jedna. Pak v tom prvním formuláři uděláš nějakou změnu a potáhne se ti to napříč aplikací.

Pokud ten seznam je nějaký jednoduchý "List of(něco)" tak můžeš přímo v konstruktoru formuláře 2 předávat z formuláře 1 na daný seznam odkaz.

Pokud to je nějaké složitější (vlastní metody, validace atd.) tak to bude fungovat úplně stejně, jen to zabal do nějaké vlastní třídy. Je to přehlednější a profesionálnější, než mít všechen kód ve form 1. Tam by měl být kód starající se o UI a data by měla být bokem :)

Tady je příklad jak předat data v konstruktoru:

Tohle je konstruktor formuláře 2. List<string> je datový typ tvého seznamu

public Form2(List<string> seznam)
{
            InitializeComponent();
// s proměnnou seznam můžeš normálně pracovat, uložit si jí do lokální proměnné atd


}

A tohle je např. událost tlačítka ve formu 1, kterým otevíráš form 2. Předáváš tam odkaz na tvůj seznam

private void button1_Click(object sender, EventArgs e)
{


            Form2 formular2 = new Form2(mujSeznam);

            formular2.ShowDialog();

}

Jinak pokud bys chtěl předávat celý form 1 bude to uplně stejné, jen v tom konstruktoru změníš datový typ na formulář, ale jak jsem říkal, není to správnýá přístup.

Editováno 18.2.2014 8:53
Nahoru Odpovědět
18.2.2014 8:51
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar

Neregistrovaný
Avatar
Odpovídá na Honza
:19.2.2014 18:22

Ahoj, používám třídu s názvem OperacesPolozkami, kde mám metody na práci s listem, především používám tuto na přidání:

public void PridaniPolozky(typ něco..)
{
    Polozka nova_polozka = new Polozka(něco..);
    list_polozek.Add(nova_polozka);
}

ve Form1 mám pak metodu, kterou si data zapisuju:

private OperacesPolozkami Operace = new OperacesPolozkami();

public void ZaslanaData(typ něco..)
{
    Operace.PridaniPolozky(něco);
}

No a já bych pak potřeboval, abych si tuhle metodu "ZaslanaData" mohl zavolat z Form2 a aby zapisovala do stejného Listu, do kterého jsem si už například zapsal některá data.
A jinak, když si konstruktorem Formem2 posílám List, v mém případě List<Polozka> list_polozek, tak to mě moc asi nepomůže, protože mě tam pak chybí instance té "Operace".

 
Nahoru Odpovědět
19.2.2014 18:22
Avatar

Neregistrovaný
Avatar
Odpovídá na Honza
:19.2.2014 23:00

Už jsem to vyřešil, nějak mě nedošlo, že konstruktoru jde tak jednoduše předat instance. :`

 
Nahoru Odpovědět
19.2.2014 23:00
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.