[C#] Main Form sluiten, 2e Form open houden

Pagina: 1
Acties:
  • 850 views sinds 30-01-2008
  • Reageer

  • Griffin
  • Registratie: Maart 2003
  • Laatst online: 27-11 15:27

Griffin

Is mythical

Topicstarter
Allereerst even aangevend dat de titel van het topic hopelijk duidelijk genoeg is, ander hoop ik dat mijn beschrijving hieronder duidelijk is.

Ik heb 2 forms. 1 main form waar ik een paar dingen aangeef, als ik hier dan op OKbtn klik dan moet er een nieuw Form geopend worden, maar het main form moet gesloten worden.
Ik heb opgezocht en erachter gekomen dat als je de main form sluit dat je hele solution gesloten word.
Dus toen heb ik het met Hide() geprobeerd, echter deze blijft dan in je memory staan en dit krijg ik er niet uit.

Wat wil ik laten gebeuren:
- main form weg halen nadat er op OK is geklikt.
- nadat er op OK is geklikt moet het andere form zich openen en de gebruiker moet hier normaal gebruik van moeten maken.
- op het 2e form staat een knop op het spel (want dat is het) te restarten. Dan moet het 2e form gesloten worden en het Main form weer geopend worden zodat de spel gegevens opnieuw ingevuld kunnen worden en er opnieuw begonnen kan worden.
- als de gebruiker het 2e form sluit dmv het kruisje rechtsbovenin dan moet het hele programma gesloten worden en mag er niets meer in de memory staan.

Ik heb al gezocht via Google echter alles wat ik vind krijg ik met geen mogelijkheid aan de gang of snap al niet wat ze bedoelen.
BTW: ik ben een beginneling op het gebied van C#. weet wel het een en ander, maar nog niet veel.

BVD en mocht er iets niet duidelijk zijn hoor ik dit graag

Verwijderd

Je kan het doen met een hide. Dus zodra op OK gedrukt wordt moet je de MAIN hiden.

- Bij het herstarten van de game sluit je form2 en zet je main weer op visible.
- Bij het sluiten van form2 (dmv kruisje) sluit je form2 en sluit je de main form (dit kan je door de event te gebruiken die getriggered wordt als je op kruisje van form2 drukt, *denk* dat dit de Form_Unload event is)

  • Vedett.
  • Registratie: November 2005
  • Laatst online: 08:28
Bij het openen van je tweede form, attach je aan de FormClosed event van form2. Voordat je form2 toont, verberg je het huidige form1. In je event handler toon je dan opnieuw je form1.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public partial class Form1 : Form
    {
        private void OpenForm2()
        {
            Form2 frm = new Form2();
            frm.FormClosed += new FormClosedEventHandler(frm_FormClosed);
            this.Visible = false;
            frm.Show(this);
        }

        void frm_FormClosed(object sender, FormClosedEventArgs e)
        {
            this.Visible = true;
        }
    }

    public partial class Form2 : Form
    {

    }


Het nadeel van dit is zoals je al aangeeft dat alles in geheugen blijft. Maar dit is echt wel de gemakkelijkste manier.

Wat je eigenlijk wilt is een Appdomain opstarten zonder formulier. Dat kan, zoek maar in je Main method. Daar wordt bij een standaard winforms applicatie een appdomain aangemaakt met een form. Zodra je dit formulier sluit, zal het Appdomain zich ook sluiten.

Je kan ook een appdomain creëren zonder een formulier, maar dan moet je zelf het hele appdomain unloaden. Het moelijke daaraan is niet hoe ja dat doet (AppDomain.Unload(AppDomain.CurrentDomain);), maar wel wanneer je dit doet.

Ik zou gewoon het form hiden. Zoveel extra geheugen gaat dit echt niet kosten, en aan cpu al helemaal niets.

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 30-11 00:17
Je moet volgens mij je design herzien want een main form dat gesloten moet worden is imho geen main form.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Vedett.
  • Registratie: November 2005
  • Laatst online: 08:28
Nee het is een perfect haalbaar design. Neem bijvoorbeeld microsoft word. Die creëert ook maar één process voor verschillende windows. En het sluit niet af als het eerste van twee geopende word document sluit.

De TS zou dus ook een Single Instance Application kunnen overwegen.

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Word is MDI (hoewel het heel crippled doet alsof het SDI is), ergo het mainform sluit nooit

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Is dat niet gewoon een setting van je solution?

Afbeeldingslocatie: http://tweakers.net/ext/f/f3cf3b0e606298333149b53c0577606b/full.gif

[edit]
Oh, wacht... C# :P

Maar idd, een 'main' form zou niet gesloten moeten worden.

[ Voor 25% gewijzigd door RobIII op 25-03-2007 23:37 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Een soort 'form-controller' maken die de main form start en indien deze gesloten wordt het volgende form openen.

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 30-11 00:17
Vedett. schreef op zondag 25 maart 2007 @ 23:13:
Nee het is een perfect haalbaar design. Neem bijvoorbeeld microsoft word. Die creëert ook maar één process voor verschillende windows. En het sluit niet af als het eerste van twee geopende word document sluit.

De TS zou dus ook een Single Instance Application kunnen overwegen.
De vraag gaat niet over processen en formulieren maar over formulieren en formulieren

Net zoals je de samenwerking tussen je code modules designed, design je de samenwerking tussen je formulieren ook, en volgens mij gaat het daar hier mis.

[ Voor 14% gewijzigd door farlane op 26-03-2007 08:42 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Griffin
  • Registratie: Maart 2003
  • Laatst online: 27-11 15:27

Griffin

Is mythical

Topicstarter
Na een goed nachtje slaap kwam ik op het volgende.

Ik draai de 2 forms om. Het gameFORM (wat eerst het 2e form was) word nu het MAIN FORM. en de instelling Form word nu het 2e form.
Het enige wat ik nog moest doen was zorge dat het 2e form altijd met het goed MAIN form bleef werken. Dus gewoon een parameter meegeven wat een type Mainform is.

MAINFORM:
SpelerAdd nieuwSpel = new SpelerAdd(this);

FORM2:
public SpelerAdd(GUIBord bord)

zo dus. en nu werkt het. gister zo aan het prutsen geweest dat je daar dan niet aan denkt.

Toch bedankt voor alle hulp.
Pagina: 1