Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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
roks
Člen
Avatar
roks:13.6.2013 22:17

Zdravím, mám problém s "Listom" ... Vo Form1 mám vytvorený List<trieda1> list1;
Po kliknutí na jeden button sa otvorí Form2, v ktorej mám vytvorený List<trieda1> list2;
Potreboval by som spraviť, aby som mohol vo Visual Studiu v triede Form1.cs otvoriť list2. Lenže nemôžem to spraviť takto : form2.list2, keďže list2 nemôže byť verejný. Nejaké návrhy? Ďakujem :) :)

 
Odpovědět
13.6.2013 22:17
Avatar
Odpovídá na roks
Michal Žůrek - misaz:13.6.2013 22:42

to co děláš je podle mě blbost. Nevím jak je na tom c#, ale VB.NET umí moduly, které jsou dostupné po celém projektu.

Nicméně si myslím, že tvůj problém jde řešit i jinak.

 
Nahoru Odpovědět
13.6.2013 22:42
Avatar
Jan Vargovský
Tvůrce
Avatar
Jan Vargovský:13.6.2013 23:49

Můžeš si udělat propertu na ten list, uložit si někde jeho referenci a pracovat s ním takhle - ale tohle určitě není nejideálnější řešení

 
Nahoru Odpovědět
13.6.2013 23:49
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na roks
Petr Nymsa:14.6.2013 7:46

Vytvořil bych si třídu (Model) která by visela nad oběma Formy, kde by jsi měl data. Předpokládám stejně, že FOrm 2 doplňuje data (list) z Form 1. Tudíž si udělej třídu, která bude dostupná například z Program.cs kde budeš mít statickou instanci této třídy a budeš mít přístup k datům z obou formů. Jak implementuješ přidávání, odebírání ,... dat už je na tobě.

Nahoru Odpovědět
14.6.2013 7:46
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Jan
Člen
Avatar
Jan:14.6.2013 20:26

Jde to řešit i bez statiky, pokud bys list2 vytvořil ve formu 1 a pak ho předal do druhého formuláře při jeho vytvoření, budeš k němu moci přistupovat z obou formulářů, a zároveň díky tomu že se kolekce implicitně předávají vždy referencí bude v obou formulářích stejný.
Ve formu2 upravíš konstruktor:

public partial class Form2 : Form
   {
       private List<string> list;
       public Form2(List<string> list)
       {
           InitializeComponent();
           this.list = list;
       }
   }

A form dva tím pádem budeš vytvářet následovně

public partial class Form1 : Form
  {
      private List<string> list;
      public Form1()
      {
          InitializeComponent();
          list = new List<string>();
      }

      private void button2_Click(object sender, EventArgs e)
      {
          Form2 form = new Form2(list);
          form.Show();
      }
  }
Nahoru Odpovědět
14.6.2013 20:26
Cogito ergo sum
Avatar
roks
Člen
Avatar
Odpovídá na Jan
roks:18.6.2013 21:21

Skúšal som to tak, ako si napísal, ale to nie je riešenie, potrebujem ten List otvoriť ako keby som mal public premennú. Ale Public List mi nejde, takže neviem.

 
Nahoru Odpovědět
18.6.2013 21:21
Avatar
roks
Člen
Avatar
Odpovídá na Michal Žůrek - misaz
roks:18.6.2013 21:23

Zatiaľ som nikde nenašiel, ako vytvoriť modul na celý projekt. Takže asi to nebude riešenie :(

 
Nahoru Odpovědět
18.6.2013 21:23
Avatar
roks
Člen
Avatar
Odpovídá na Jan Vargovský
roks:18.6.2013 21:40

Diki ale vobec neviem ako vytvoriť referenciu List :)

 
Nahoru Odpovědět
18.6.2013 21:40
Avatar
roks
Člen
Avatar
Odpovídá na Petr Nymsa
roks:18.6.2013 21:41

Ide t oaj vo VS 2010? ak hej tak ako prosím ? :)

 
Nahoru Odpovědět
18.6.2013 21:41
Avatar
ghol3
Člen
Avatar
ghol3:18.6.2013 21:42

jestli sem te pochopil spravne tak si tam jen pridej metodu co ti bude vracet ten list z druhyho formu, ale je to takovy zvlastni :-) nevim na co to potrebujes, ale rekl bych ze bude lepsi kdyz si na to udelas tridu a ne form xD

 
Nahoru Odpovědět
18.6.2013 21:42
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na roks
Jan Vargovský:18.6.2013 23:47
private List<T> list;
private List<T> List
{
    get { return list; }
    set { list = value; }
}

Psal jsi to takhle? S tím,že někde v metodě Load nebo v konstruktoru musíš nasat ještě

list = new List<T>;
Editováno 18.6.2013 23:48
 
Nahoru Odpovědět
18.6.2013 23:47
Avatar
Domiy
Neregistrovaný
Avatar
Odpovídá na Jan
Domiy:19.6.2013 6:13

Fuj!

Tohle se má dělat v aplikaci - v Main. Main má fungovat jako jediný zaujatý objekt - takže z main zavoláš všechny objekty aplikace. Z Formu1 vytáhneš list a dáš jej do Formu2 to ano. Ale oba furmuláře musí být nezaujaté... Aplikace by měla být pouze soustavou volání a parametriziváním volání návratem z volání. Ale žádná logika atd. Objekty pro tuto aplikaci pak budou nezaujaté! A maximálně obecné.

 
Nahoru Odpovědět
19.6.2013 6:13
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 12 zpráv z 12.