» »

[visual C#] dogodek na Form2 sproži dogodek na Form1

[visual C#] dogodek na Form2 sproži dogodek na Form1

Beezgetz ::

Živjo!

Imam Form1 s treeView1. Ko klikneš na določen node, se odpre Form2, in sicer s Show() in ne ShowDialog(), z namenom, da lahko delam na obeh formah. :D

Rad pa bi, da ko na Form2 kliknem Save_Button, sprožim 'update' treeView1 na Form1 (Form2 naj ostane odprta...) :\

Zdaj imam gumb na Form1. Ko ga kliknem, se treeView 'update'-a. Kako 'prenesem' ta 'gumb' v Form2, da se 'update'-a treeView1 na Form1? :(

Se opravičujem za grobo začetniško izražanje, :8)
Lep pozdrav, Beezgetz. :)

morbo ::

Zakaj ne raje enostavneje vse narediš na enem obrazcu? Če že moraš, potem konstruktorju Form2 pošlji referenco na treeview.

Beezgetz ::

Živjo Morbo, :)

Form2 je u bistvu računski del, nekaj zračunam, pol pa shranim na disk.
Form1 je pa, u smislu, shramba. Na treeView1 mi prikazuje shranjene račune, pa tudi možnost novega izračuna ( show form2 ).

Zdaj je tako, da že moram, pa bi te prosil, da mi malo pojasniš 'konstruktorju Form2 pošlji referenco na treeview.' ...

a to pomeni, da moram na Form2 narest nov konstruktor (kako pa to zgleda?), ki bo ob zagonu Form2 sprejel 'referenco' o treeView1 iz Form2? Si predstavljam nekaj takega kot klicanje razreda (Class) .

Hvala, Beezgetz

morbo ::

Jst bi to vseeno naredil na enem obrazcu, ker tvoj dizajn diši po odpiranju n-tih form, ki se potem rade kar nekam izgubijo v ozadje... Če ne obdeluješ več nod-ov vzporedno, potem form2 raje odpri modalno - showdialog()

public partial class Form2 : Form {

private TreeView tv;

public Form2(TreeView tv) {
this.tv = tv;
InitializeComponent();
}
}

Ko ustvariš form2 podaj konstruktorju treeview iz form1: Form2 frm = new Form2(mojtreeview) in na form2 potem delaš z notranjo spremenljivko tv, ki pa je v bistvu isti predmet kot mojtreeview iz form1.

Beezgetz ::

Hej Morbo, :)

Dobro si ti to zavohu. Namreč, ja, imam Form1, in iz njenega treeView-a lakho zaženem tri različne kalkulatorje. V principu so torej res lahko n pojavitve forme 2, 3 ali 4. Ali lakho določim število odprtih Form2? Da se Form2 ne odpre več kot 4 krat, recimo? :\
Zakaj pa je to slabo? (Upam, da nisem zdaj postavil preveč neumno začetniško)

V praksi imam vse tri forme (2, 3 in 4) odprte ne več kot dvakrat ali trikrat. Form1 je pa 'shramba' shranjenih rezultatov iz form 2, 3 in 4, na katero lahko pridem iz vsake druge forme in si rezultate ogledam. 8-)

ShowDialog() sem imel do zdaj, samo je motilo to, da sem moral zapret formo, da sem na Form1 pogledal neke rezultate, in se vrniti nazaj s ShowDialog(); Umes sem moral rezultat napisat na nek papir, da ga ne pozabim, pa tako dalje... ;(


Koda kii si jo poslal se ustavi pri Form2 frm = new Form2(mojtreeview)...
ime ne obstaja v tem kontekstu... ;(

probal sem tv , TreeView mojtreeview, TreeView tv... noče... prou žleht je...

Hvala, Beezgetz

morbo ::

Tak dizajn je slab, ker je zmeden in nepregleden. Formi se ti potapljajo v ozadje in porabiš več časa z iskanjem, kot z delom. Namesto odpiranja novih form za vsak različen kalkulator, uporabi tri zavihke na eni, ali vsakega v svoj frame, recimo. Mislim pa da je najbolj elegantna rešitev vse na enem obrazcu, razen če moraš nujno editirat več nod-ov "vzporedno" (v kar dvomim).

Ime ne obstaja v tem kontekstu, ker moraš namesto "mojtreview" vstavit ime tvoje TreeView spremenljivke iz form1.

Beezgetz ::

aha, aha, Že dela tko kot mora!:D :) :D :) :P :D :)

To z zavihki, jih imam že too much 8-O na formi ena, in ravno zaradi preglednosti (in malo dizajna, ena forma je vizualno večja od druge in tako..) sem se odločil za štiri okna. :8)

Hej Morbo, hvala, v velko pomoč si bil! A veš mogoče še kako določim, da se mi ne odpira več kot 3 inštance ene forme? :\

Lep pozdrav, Beezgetz

morbo ::

A veš mogoče še kako določim, da se mi ne odpira več kot 3 inštance ene forme?


Objekte form2 lahko dodajaš na nek List in dovoljuješ stvarjenje novih le dokler seznam vsebuje manj ali enako kot neko želeno število. Samo ne pozabit potem praznit tega seznama, kadar zapiraš form2 -> seznam lahko enako kot treeview podaš konstruktorju in v form2.Designer (to je tam kjer se ti piše samodejna koda ob dodajanu gradnikov) v metodo dispose() dodaš: imeseznama.Remove(this);

Beezgetz ::

Živjo Morbo, :8) (sem ti res hvaležen, da me prenašaš)

Grah! ;( Sem probal, pa ne znam narest tega Lista...
a to kot array int[2] seznam; ali pa kot kak struct seznam?

if pogoj mogoče tko...? :\
int limitSeznama = 3;
if (int i = 0; i < limitSeznama; i++)
//if (int i = 0; i < 3; i++)
{
Form2 frm = new Form2();
frm.Show();
}
else
{
MessageBox.Show("Preveč Odprtih Okn. Zarad Prepiha Boli Glava!");
}

Najdu sem form2.Designer, dispose(). :)
Ta del je bil najlažji...

Prosil bi te za pomoč.

Hvala, Beezgetz

morbo ::

Najprej v form1 in form2 najavi seznam, ki prejema le potomce predmeta Form (bolj trdoživa in pregledna koda):
private List<Form> seznamForm = new List<Form>(3);

Konstruktorju na form2 dodaj nov parameter ki bo prejel sklic na seznam iz form1 in ga shrani v privat spremenljivko (pač isto kot si naredil za treeview) in v dogodek kjer ustvarjaš nova okna vpiši:
if (seznamForm.Count < 3) {
       Form2 frm = new Form2(mojtreeview, seznamForm);
       seznamForm.Add(frm);
       frm.Show();
}

Beezgetz ::

Morbo, :D :) :) :D :P :D :)
:P :)) :D :) :P :)) :D 8-) :) :D :)) :P 8-) :) :D
Jah, ne morem verjet. Dela! 8-O
:P :)) :D :) :P :)) :D 8-) :) :D :)) :P 8-) :) :D
Najlepša hvala!!!
:P :)) :D :) :P :)) :D 8-) :) :D :)) :P 8-) :) :D
Lep pozdrav, Beezgetz


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C# začetniško vprašanje - klicanje metode

Oddelek: Programiranje
10978 (748) vorantz
»

[c#] iz class v class

Oddelek: Programiranje
5823 (697) darkolord
»

C# iz form2 v form1,textboxi

Oddelek: Programiranje
131872 (1498) Keki
»

C# Pomoč

Oddelek: Programiranje
131323 (1148) jizzer
»

[visual C#] Na drugem računalniku se ne zažene

Oddelek: Programiranje
121544 (1374) Beezgetz

Več podobnih tem