2012-04-14 1 views

Antwort

0

Definieren Sie ein statisches Ereignis in Namensraum-Ebene nicht in Form auf Form1 Feuer dieses Ereignis zu schließen und Griff auf form2 wählen ist die erfordern Registerkarte

+0

Vermeiden Sie statische Ereignisse wie die Pest. Sie sind, nicht explizit das Abmelden des Ereignisses verursacht einen Speicherverlust. Da das Ereignis einen Verweis auf das Formularobjekt für immer behalten wird. Es kann nicht vom Garbage Collector behoben werden, Sie haben das Ereignis statisch gemacht. –

1

Dafür wurden Event-Handler entwickelt. Sie sollten einen Handler für das FormClosed-Ereignis des Formulars schreiben. Ähnlich wie folgt aus:

private void button1_Click(object sender, EventArgs e) { 
     var frm = new form1(); 
     frm.FormClosed += new FormClosedEventHandler(frm_FormClosed); 
     frm.Show(); 
    } 

    void frm_FormClosed(object sender, FormClosedEventArgs e) { 
     tabControl1.SelectedTab = tabPage2; 
    } 

Oder kompakter:

 var frm = new form1(); 
     frm.FormClosed += delegate { tabControl1.SelectedTab = tabPage2; }; 
     frm.Show(); 

Mit dem großen Vorteil, dass diese jetzt Detail FORM0 ganz eine Implementierung ist, wird kein spezieller Code oder Kenntnisse von FORM0 in der Klasse Form1 erforderlich .

+0

es nicht funktioniert haben! In 'Form1', rufe ich nicht' tabControl' in 'form0' –

+0

@DuyKhanh dieser Code ist für form0, nicht für form1. Der Code, den Hans in button1_click präsentiert, sollte dorthin gehen, wo Sie form1 öffnen. – Steve

+0

Das ist ein ziemlich wichtiger Kommentar zu der Antwort :) –