Diskuze: Problém s kolekciou List

C# .NET .NET (C# a Visual Basic) Problém s kolekciou List American English version English version

Avatar
roks
Člen
Avatar
roks:

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):

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
Nesnáším {}, proto se jim vyhýbám.
Avatar
Jan Vargovský
Redaktor
Avatar
Jan Vargovský:

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
Redaktor
Avatar
Odpovídá na roks
Petr Nymsa:

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:

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  +1 14.6.2013 20:26
Cogito ergo sum
Avatar
roks
Člen
Avatar
Odpovídá na Jan
roks:

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:

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:

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:

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:

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ý
Redaktor
Avatar
Odpovídá na roks
Jan Vargovský:
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:

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.