2011-01-15 11 views
2

Ich arbeite an einem Programm, bei dem das Klicken auf eine Schaltfläche in form1 form2 öffnet. Ich werde dann Formular1 ausblenden, bis Formular2 geschlossen ist. Das Problem, das ich habe, ist, dass ich Form1 nicht nach dem Schließen von Form2 zeigen kann. Irgendwelche Ideen, wie das zu beheben ist?Anzeigen/Ausblenden des Hauptformulars in C#

 try 
     { 
      Form1.ActiveForm.Hide(); 
      AddGradeForm = new Form2(Form.NumberOfSelections); 
      AddGradeForm.ShowDialog(); 
      MessageBox.Show(AddGradeForm.Result.ToString()); 
     } 
     catch (Exception i) 
     { 
      Form1.ActiveForm.Hide(); 
      AddGradeForm.Dispose(); 
      AddGradeForm = new Form2(Form.NumberOfSelections); 
      AddGradeForm.ShowDialog(); 
      MessageBox.Show(AddGradeForm.Result.ToString()); 
     } 
     Form1.ActiveForm.Show(); 

Fehler: NullReferenceException wurde nicht übergeben. Der Objektverweis wurde nicht auf eine Instanz eines Objekts festgelegt.

+0

Ich glaube nicht, 'try' ...' catch' tut, was Sie denken, es tut ... – Thomas

+0

Im den try..catch mit der früheren Form2 zu entsorgen, wenn es ohnehin schon war erstellt. Es ist für den Fall, dass der Benutzer entscheidet, form2 mehrmals zu öffnen. Ich weiß, dass ich AddGradeForm.Dispose() irgendwo anders platzieren sollte, aber ich arbeite immer noch daran, es zu strukturieren. –

Antwort

6

Das ist, weil es mehr keine aktive Form ist, haben Sie die eine versteckte, die aktiv sein könnte. Dies hat andere Nebenwirkungen, Ihre App wird den Fokus verlieren. Was Sie tun müssen, ist, das vorher aktive Formular zu verfolgen und es wieder anzeigen zu lassen vor der Dialog schließt. Wie folgt aus:

 var prior = Form.ActiveForm; 
     using (var dlg = new Form2()) { 
      dlg.FormClosing += delegate { prior.Show(); }; 
      prior.Hide(); 
      if (dlg.ShowDialog() == DialogResult.OK) { 
       MessageBox.Show("result"); 
      } 
     } 
+0

Warum haben Sie das FormClosing-Ereignis verwendet? dlg kann von einem anderen Handler nicht mehr versteckt werden und trotzdem würde vorher angezeigt werden. Ist es nicht besser FormClosed Event zu verwenden? – dzendras

+0

FormClosed ist zu spät. Ihre App wird den Fokus verlieren. Wenn der Dialog das Schließen abbrechen kann, müssen Sie ihm ein anderes Ereignis geben, das Sie abonnieren können. –

+0

+1 schlag mich dazu und ich war direkt hinter dir mit Code in der Zwischenablage =) – Tergiver

0

Das sollte letzte Zeile sein:

Form1.Show(); 
+0

Es gibt keine solche Methode für Form1 –

+0

Form1 ist ein * Typname *, kein Verweis auf eine Formularklasse. –

+0

Mein schlechtes :) Danke für die Aufklärung. – dzendras

0

Die Linie

Form1.ActiveForm.Show(); 

Form1.Show(); 

Auch sein sollten beachten, dass es sich um eine Ausnahme, wenn es nicht aufgerufen werden kann. wickle es in einen finally-Block, wenn du willst, dass es aufgerufen wird.

try 
    { 
     Form1.ActiveForm.Hide(); 
     // ... 
    } 
    catch (Exception i) 
    { 
     // ... 
    } 
    finally 
    { 
     Form1.Show(); 
    } 
+0

Ich sehe eine .Show() - Methode für Form1 nicht. Deshalb verwende ich Form1.ACtiveForm.Show(); –

+0

Das ist kein legaler C# -Code, Show() ist eine Instanzmethode. –

+0

Sie haben Recht, haben nicht bemerkt, dass es sich um einen Typnamen handelt, und haben einfach angenommen, dass es sich um eine Instanz handelt. Upvoted deine. –

Verwandte Themen