[ SpeedFreak @ 10.01.2009. 22:33 ] @
Imam malu aplikaciju koja radi sa bazom. Postoje dva režima rada: unos u bazu i pretraga. E sad, u toolbar-u imam dva dugmeta od kojih svako pokreće po jedan režim rada. Dakle, kad pritisnem dugme 'Unos' treba da dobijem forme za unos u bazu, a kad pritisnem 'Pretraga' umjesto tih formi da se prikažu forme za pretragu.
Razmišljam izmedju dva rješenja (a možda postoji i treće kog se nisam sjetio). Da napravim dva panela pri startovanju programa pa da im smjenjujem atribut visible ili da svaki put kad se pritisne novo dugme obrišem postojeće forme i napravim nove. Da li postoji neko bolje rješenje?
[ sallle @ 12.01.2009. 03:13 ] @
mozda tab kontrola...
[ SpeedFreak @ 12.01.2009. 16:22 ] @
To mi je prvo palo na pamet, ali mi vise odgovara da se na dugmad mijenja sadrzaj. Mala je aplikacija, tako da nije problem ovdje ni da stalno radim dispose() na stare forme i pravim nove jer ih ima 10tak na panelu, tako da se brzo to obavlja.
[ deerbeer @ 12.01.2009. 19:09 ] @
Sto ne probas da napravis 2 odvojene forme (unos i pretraga) i da ih dinamicki ucitavas u panel ,
taklo sto postavis FormBorderStyle na "None" , Parent property od forme da bude panel,
i da naravno setujes poziciju forme na Top-left tacku od panela ..

Code:
 
Panel p = new Panel() ; 
p.AutoScroll = true ; 

Form f1 = new Form() ; 

f1.FormBorderStyle = FormBorderStyle.None ; 
f1.Parent=  p ; 
f1.Top = p.Top ; 
f1.Left = p.Left ; 
f1.TopLevel = false ; 

p.Controls.Add(f1) ; 

f1.Show() ; 
f1.Focus() ; 

//zatvaranja forme .. palis drugu formu posle ovoga 
p.Controls.Remove(f1);
f1.Close();
f1.Dispose();

// opet isto ... 

Form f2 = new Form() ; 
..
..
..

Ovo naravno mozes da staviis u jednu funkciju koja prima Form kao parametar,
pa da je koristis odakle hoces da bi promenio trenutnu formu na panelu ...





[ SpeedFreak @ 13.01.2009. 11:44 ] @
pa nesto slicno sam i uradio. Ja imam dvije funkcije koje prave panele dinamicki, i dvije koje ih unistavaju (.Dispose()). kad se pritisne dugme za pretragu, unisti se panel za unos a kreira panel za pretragu i obratno. E sad, da li je dovoljno da unistim samo panel, a ne sve forme u njemu? koliko znam garbage collector bi trebao to da odradi za mene, jel tako?
[ deerbeer @ 13.01.2009. 12:10 ] @
Ne .. panel ne moras da brises , on ti sluzi samo kao kontejner za forme koje se dinamicki pojavljuju ili unistavaju .
ovaj kod sam ti dao je samo primera radi (Panel p = new Panel()) .
Panel ubacis kao kontrolu i on je u dizajn modu prazan .
U runtime - modu dinamicki ucistavas forme i smenjujes ih na klik u toolbaru .
E sad .. ne znam kako ti izgleda interfejs mozda ti ovo ne pije vodu ,
al i ako panel kreiras dinamicki .. ugasi formu sa Form.Close pa onda tek onda unisti panel ...

[ SpeedFreak @ 14.01.2009. 23:06 ] @
Vidim o čemu pričaš, ali ja sam mislio sljedeće: umjesto da imam jedan panel u koji ću da stavljam forme koje kasnije moram pojedinačno da brišem, ja bih da napravim dva panela (panel za dodavanje i panel za pretragu) koja ću (pri njihovom kreiranju) da napunim formama , a kad budem trebao da ih smijenim samo njih zatvorim i unistim a garbage collector da odradi ostalo:

ne obraćajte pažnju na sintaksu jer sam ovo napisao sad, nisam kopirao iz IDE-a. Ideja je važna :D

Code:

private System.Windows.Forms.Panel dodajPanel; //ovo je panel koji sadrži forme za dodavanje novog člana
private System.Windows.Forms.Panel pretragaPanel; //ovaj sadrži forme za pretragu

private void kreirajDodajPanel()
{
this.dodajPanel = new System.Windows.Forms.Panel();
this.dodajPanel.SuspendLayout();

//e sad ovdje pravim nove instance raznih formi: nekoliko dugmadi, textbox-ova i label-a (20-tak njih)
//i stavljam ih na ovaj panel

this.Controls.Add(this.panel1);
this.dodajPanel.ResumeLayout(false);
this.dodajPanel.PerformLayout();
}

private void kreirajPretragaPanel()
{
//Da ne pišem, ista stvar kao kod prethodne funkcije
}


Isto mi treba nečija potvrda da ja ovo ispravno radim.
Npr. u jednom trenutku mi je u programu prikazan panel za pretragu. Ja pritisnem dugme za dodavanje novog člana koje ima od prilike ovakav event handler:

Code:

//prije ovoga naravno ispitujem da li je prikazan panel za pretragu, u suprotnom ne bi radilo

this.pretragaPanel.Dispose();
kreirajDodajPanel();

[ deerbeer @ 15.01.2009. 09:54 ] @
Citat:

//e sad ovdje pravim nove instance raznih formi: nekoliko dugmadi, textbox-ova i label-a (20-tak njih)

TI dinamicki kreiras win kontrole na panelu ?
Zar ti nije lakse da napravis formu i njene kontrole u dizajn modu pa da formu dodajes na panel .
Namucices se ako dugmad ,textbox-ove dodajes setujes njihove evente i pozicioniras kros kod .


U 90% slucajeva ce gc da odradi posao za tebe ..
Pri unistavanju panela ako budes u nju dodavao formu
negde bi trebao da imas i Form.Close() da bi mogao u dialogu forme da
reagujes na (Form_Closing event) njeno zatvaranje sa mozda nekom porukom
(da li zelite da snimite izmenei itd) i eventualnim snimanjem u bazu


[ SpeedFreak @ 15.01.2009. 11:39 ] @
Citat:
TI dinamicki kreiras win kontrole na panelu ?
Zar ti nije lakse da napravis formu i njene kontrole u dizajn modu pa da formu dodajes na panel .

Ja u stvari to i napravim sve u dizajneru, poslije samo iskopiram kod iz InitializeComponent() funkcije.

Probaću na tvoj način preko forme, bolje mi zvuči. Hvala