Diskuze: Problém s kolekciou List
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 12 zpráv z 12.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
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.
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í
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ě.
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();
}
}
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.
Zatiaľ som nikde nenašiel, ako vytvoriť modul na celý projekt. Takže asi
to nebude riešenie
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>;
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é.
Zobrazeno 12 zpráv z 12.