Forum » Programiranje » [c#] Form, prikaz le enega forma
[c#] Form, prikaz le enega forma
japol ::
Kako narediš, da če je forma že zagnana, jo samo prikaže, je ne zaganja na novo, če pa ni zagnane, jo pa zažene.
Primer: imam formo "About" tako kot vsi programi. In želim da ko klikne ne button za prikaz, da mi prikaže formo, v kolikor pa je že prikazana, da mi je ne zaganja na novo.
ta koda deluje v primeru ko kliknem na oProToolStripMenuItem, se prikaže forma, če še enkrat kliknem na isto (oProToolStripMenuItem), mi obstoječo formo prikazuje na vrhu - kar je ok, če pa izklopim formo OProgramu, pa če ponovno kliknem na oProToolStripMenuItem, se pa nič ne zgodi (mi ne prikaže forme).
Kako to popravim? Po možnosti brez Singletone.
Primer: imam formo "About" tako kot vsi programi. In želim da ko klikne ne button za prikaz, da mi prikaže formo, v kolikor pa je že prikazana, da mi je ne zaganja na novo.
private O_programu o1=null; private void oProToolStripMenuItem_Click(object sender, EventArgs e) { if (o1 == null) { o1 = new O_programu(); o1.Show(); } else { o1.Activate(); } }
ta koda deluje v primeru ko kliknem na oProToolStripMenuItem, se prikaže forma, če še enkrat kliknem na isto (oProToolStripMenuItem), mi obstoječo formo prikazuje na vrhu - kar je ok, če pa izklopim formo OProgramu, pa če ponovno kliknem na oProToolStripMenuItem, se pa nič ne zgodi (mi ne prikaže forme).
Kako to popravim? Po možnosti brez Singletone.
- spremenil: japol ()
darkolord ::
Ko formo zapreš, ne gre avtomatsko na null... Poskusi recimo kaj takega:
if (o1 == null || o1.IsDisposed)
mihies ::
Nemodalne forme kličejo Dispose, ko jih uporabnik zapre. Zato je forma v stanju Disposed, ko kličeš Activate. Rešitvi sta, na hitro rečeno, dve:
1. če prav hočeš obdražati instanco, potem znotraj dogodka FormClosing postaviš
in namesto Activate enostvno postaviš
2. druga, lepša rešiteva pa je, da vsakič znova narediš instanco forme, preden jo prikažeš. Čisteje in bolj prijazno za smetarja.
1. če prav hočeš obdražati instanco, potem znotraj dogodka FormClosing postaviš
e.Cancel = true; o1.Visible = false;
in namesto Activate enostvno postaviš
e.Visible = true;
2. druga, lepša rešiteva pa je, da vsakič znova narediš instanco forme, preden jo prikažeš. Čisteje in bolj prijazno za smetarja.
http://blog.rthand.com/
SLODUG - uporabniška skupina
https://www.facebook.com/groups/slodug/
SLODUG - uporabniška skupina
https://www.facebook.com/groups/slodug/
TESKAn ::
Lahko namesto
uporabiš
in ti program ne bo šel naprej, dokler uporabnik ne zapre okna, takrat pa ti disposaš o1. Tako ti ga tudi ni treba deklarirat zunaj, ampak v rutini, tik preden prikažeš okno.
o1.show()
uporabiš
o1.showdialog()
in ti program ne bo šel naprej, dokler uporabnik ne zapre okna, takrat pa ti disposaš o1. Tako ti ga tudi ni treba deklarirat zunaj, ampak v rutini, tik preden prikažeš okno.
Uf! Uf! Je rekel Vinetou in se skril za skalo,
ki jo je prav v ta namen nosil s seboj.
ki jo je prav v ta namen nosil s seboj.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | c# tiho tiskanje slik.Oddelek: Programiranje | 1936 (1607) | OmegaM |
» | [Visual C#] TableAdapterOddelek: Programiranje | 1134 (1010) | detroit |
» | C# PomočOddelek: Programiranje | 1400 (1225) | jizzer |
» | c# undo, redo, pasteOddelek: Programiranje | 950 (850) | japol |
» | C# okna in podoknaOddelek: Programiranje | 1652 (1246) | FlashM |