Imam pitanje, u C# bi trebao proslijediti parametar (URL media filea) iz Forme2 u Formu1 (gdje se nalazi WindowsMediaPlayer kontrola), ali bez da moram ponovno pozivati Formu1 pomocu form1.show() (bar je tako bilo u primjerima na netu), probao sam na sve moguće načine ali nikako ne radi, pa bi trebao pomoc kako to napraviti.
- +/- sve poruke
- ravni prikaz
- starije poruke gore
pa ja sam to rješio prosljeđivanjem parametara pomoću static void metode koja koristi out tip varijable, pa samo gdje god je trebam, pozovem metodu i varijablu na koju želim da mi se ta vrijednost doda
Ma ne radi mi ni to, imam na Form1 wmp kontrolu i ona bi trebala dobiti URL sa Forme2 (tocnije sa treeViewa1, ovisno o oznacenom indexu) ali to nikako nejde.
da pitam... jesi probao izvući taj url iz samog tree viewa u istoj formi? probaj napravit nesto tipa string a = treeView1.SelectedNode; pa onda izvuc van tu varijablu a.
nisam nikad izvlacio podatke iz treeviewa, pa ovo samo nagađam
Da, jesam, na formi1 na play buttonu sam stavio ovako:
Form2 form2 = new Form2();
wmp.URL = form2.fileNames[form2.treeView1.SelectedNode.Index] // FileNames je List gdje su spremljeni svi URL-ovi do fileova
ali ne radi, baci mi poruku "Object reference not set to an instance of an object."
Ma sve zivo sam sprekopal i jos uvijek nije radilo, sve zive primjere s neta i stalno ne radi.
joj ma nemam sad volje, imam nekih drugih obaveza koje moram rjesit do uvecer...
evo ti par stvari koje sam iskopao,
Ne moraš direktno proslijediti. Možeš imati statičnu klasu, odvojenu od tvojih formi, koja će držati tu varijablu. Znači tamo gdje bi proslijedio, samo napraviš tipa:
BackgroundHandler.tajURL = izvorURLa();
Ovako ćeš sigurno imati nešto u toj varijabli u statičnoj klasi. Ovo baš nije OOP pristup, ali radi.
Drugačije, možeš prvo provjeriti ti je druga forma uopće instancirana. Npr., uzmimo za primjer da imaš Form1 koja se prva pojavljuje, i Form2, ta forma kojoj želiš proslijediti varijablu. U Form1 imaš objekt form2 klase Form2. Sad, u Form2 napraviš funkciju koja prima jedan parametar (taj URL koji ti treba), smjestiš ga gdje već trebaš, i u toj funkciji pozoveš Show(). Tako bi trebalo raditi. Npr.
Form1.cs
...
Form2 form2;
...
private void PokreniFormu2()
{
form2.ShowWithParametar(url);
}
....
Form2.cs
...
public void ShowWithParametar(string setURL)
{
url = setURL;
Show();
}
...
to stoji, ali on prvo pokrene formu1, pa formu2, pa iz forme 2 mora vraćati u formu 1, što baš neće samo tak raditi kak si stavio u primjer
to stoji, ali on prvo pokrene formu1, pa formu2, pa iz forme 2 mora vraćati u formu 1, što baš neće samo tak raditi kak si stavio u primjer
Jesu li obe forme istovremeno aktivne? Svejedno mu je zapravo, ako ima statičnu klasu, 2. forma će uzimati iz te statične klase podatke, a 1. forma će u statičnu klasu postavljati podatke. Forma 2 će dobiti uvijek zadnje što je u Formi 1 poslano.
to stoji, ali on prvo pokrene formu1, pa formu2, pa iz forme 2 mora vraćati u formu 1, što baš neće samo tak raditi kak si stavio u primjer
Jesu li obe forme istovremeno aktivne? Svejedno mu je zapravo, ako ima statičnu klasu, 2. forma će uzimati iz te statične klase podatke, a 1. forma će u statičnu klasu postavljati podatke. Forma 2 će dobiti uvijek zadnje što je u Formi 1 poslano.
naletio sam na lagani problem pozivanja vrijednosti iz statične klase forme 1, jer nemogu pozvat isti objekt u obje forme, svaka forma ima svoje objekte neovisno što je ista klasa
Delegati i Eventi. Točka.
Budući da proslijeđuješ custom podatke, napraviš klasu:
public class MojArgs:EventArgs
{
...
šta ti već treba
}
u toj formi iz koje proslijeđuješ podatke napravi
public delegate void (ili koji god ti je tip f-ja koja treba obraditi događaj) imeDelegata (object o, MojArgs e);
public event imeDelegata imeDogadjaja;
u formi u kojoj očekuješ podatke pretplati se na ovaj događaj iznad
imeDogadjaja mojDogadjaj += new From2.imeDelegata (naDogadjaj);
i napravi metodu koja obrađuje događaj:
public/private (šta te volja) povratni_tip_delegata naDogadjaj (object o, MojArgs e)
{
}
e sada samo u formi iz koje trebaš proslijediti podatke trebaš opalit događaj kada npr. klikneš na neko dugme, šta ti god treba..
Unutar tog handlera napravi instancu klase tvojih argumenata i opali događaj sa:
if (imeDogadjaja != null)
{
imeDogadjaja(pošiljatelj, argumenti);
}
Ovo je ugrubo, ali nadam se da si shvatio bit.
Imaš onu najprimitivniju "zdravoseljačku" metodu. Link spremi u tekstualnu datoteku, pa onda iz tekstualne datoteke procitas s druge forme.
Ili kompliciranije i elegantnije rješenje: u klasi forme1 dodaj statički atribut tipa string, npr.
static string url = "";
Onda na drugoj formi izradiš objekt klase form1
Form1 forma1 = new Form1;
i postaviš atribut url na željenu vrijednost
forma1.url = "www.ffff.com";
Statički atributi su isti kod svih insanciranih objekata iste klase.
to stoji, ali on prvo pokrene formu1, pa formu2, pa iz forme 2 mora vraćati u formu 1, što baš neće samo tak raditi kak si stavio u primjer
Jesu li obe forme istovremeno aktivne? Svejedno mu je zapravo, ako ima statičnu klasu, 2. forma će uzimati iz te statične klase podatke, a 1. forma će u statičnu klasu postavljati podatke. Forma 2 će dobiti uvijek zadnje što je u Formi 1 poslano.
naletio sam na lagani problem pozivanja vrijednosti iz statične klase forme 1, jer nemogu pozvat isti objekt u obje forme, svaka forma ima svoje objekte neovisno što je ista klasa
Ne znam što si radio, a da ne gubim previše vremena na objašnjavanje, evo primjer:
http://dl.dropbox.com/u/579001/StaticPrimjer.zip
Ako ti nešto nije jasno, pitaj.
Imas vise nacina. Najlaksi je proslijedjivanje putem konstruktora. Da ne meljem dalje pogledaj ovo:
http://www.codeproject.com/KB/cs/pass_data_between_forms.aspx
Imas vise nacina. Najlaksi je proslijedjivanje putem konstruktora. Da ne meljem dalje pogledaj ovo:
http://www.codeproject.com/KB/cs/pass_data_between_forms.aspx
Ovo je prva stvar koju sam probao uraditit kada sam počinjao programirati GUI aplikacije u C#-u. heheh Ostatak proceduralnog načina razmišljanja iz c-a. Jednostavno da, ali ne baš spretno i fleksibilno rješenje.
Imas vise nacina. Najlaksi je proslijedjivanje putem konstruktora. Da ne meljem dalje pogledaj ovo:
http://www.codeproject.com/KB/cs/pass_data_between_forms.aspx
Ovo je prva stvar koju sam probao uraditit kada sam počinjao programirati GUI aplikacije u C#-u. heheh Ostatak proceduralnog načina razmišljanja iz c-a. Jednostavno da, ali ne baš spretno i fleksibilno rješenje.
Kao sto rekoh, ima vise nacina, ali ovaj je najlaksi.
Nova klasa i proces nasljedivanja je jos jedna od nacina kako se moze rijesiti stvar ... iako se slazem sa vecinom savjeta ovdje...
Probaj koristit public static tipove podataka.
EDIT:
točnije doseg .
Probaj koristit public static tipove podataka.
EDIT:
točnije doseg .
To bas i nije best practice rijesenje. Kako je basman rekao, kad bi isao radit po zanatu tu su delegati
