» »

[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.
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š
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/

TESKAn ::

Lahko namesto
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.


Vredno ogleda ...

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

c# tiho tiskanje slik.

Oddelek: Programiranje
101936 (1607) OmegaM
»

[Visual C#] TableAdapter

Oddelek: Programiranje
61134 (1010) detroit
»

C# Pomoč

Oddelek: Programiranje
131400 (1225) jizzer
»

c# undo, redo, paste

Oddelek: Programiranje
5950 (850) japol
»

C# okna in podokna

Oddelek: Programiranje
111652 (1246) FlashM

Več podobnih tem