2012-04-01 14 views
3

Ich bin neu in Windows Forms und habe ein Problem mit allen Benutzersteuerelementen. Ich habe 3 Bedienelemente, und wenn ich auf eine Schaltfläche zum Akzeptieren klicke, komme ich zum zweiten Bildschirm (Benutzersteuerelement 2), aber wenn ich im zweiten Bildschirm auf Abbrechen klicke, komme ich zurück zum ersten Bildschirm (ich lade den ersten) Benutzer-Kontrolle wieder) das Problem ist jetzt, dass, wenn ich wieder "Akzeptieren" klicke, das Willkommen-Benutzer-Steuerelement Null und Fehler zurückgibt.Formular, das nach dem Zurückkehren zum ursprünglichen Benutzersteuerelement null zurückgibt

private void Viewer_Load (Objektabsender, EventArgs e) { formPanel.Controls.Clear(); formPanel.Controls.Add (wel); }

private void SwapControls(object sender, EventArgs e) 
    { 
     if (formPanel.Controls.Contains(wel)) 
     { 
      formPanel.Controls.Remove(wel); 
      formPanel.Controls.Add(p); 
     } 
     else if (formPanel.Controls.Contains(pin) && IsAuthenticated) 
     { 
      formPanel.Controls.Remove(p); 
      formPanel.Controls.Add(m); 
     } 
     else if(formPanel.Controls.Contains(pin) && !Global.IsAuthenticated) 
     { 
      formPanel.Controls.Remove(p); 
      formPanel.Controls.Add(wel); 
     } 

Also das erste Mal, um es lädt die Begrüßungsbenutzersteuerung, dann dort „Accept“ Ich klicke und es löscht die Benutzerverwaltung und lädt den zweiten up „Enter Pin Control“, von dort, wenn Ich klicke auf "Abbrechen". Ich entferne das Benutzersteuerelement und lade erneut auf. Willkommen. Aber jetzt, wenn ich Nehmen klicken, ich eine Null in dieser Zeile in der Begrüßungs-Benutzersteuerung erhalte

this.AddControl(this, new EventArgs()); 

Noch einmal, ich bin neu in Windows Forms und ich lerne, würden alle Eingaben sehr geschätzt.

Antwort

3

Da Sie Wiederverwendung Ihre UserControls nicht die Handler entfernen, wenn Sie sie aus dem Form entfernen, so stellen Sie sicher, dass Sie sie löschen, wenn Sie fertig sind mit Ihrem UserControls.

Versuchen Sie etwas wie das.

private void SwapControls(object sender, EventArgs e) 
{ 
    if (formPanel.Controls.Contains(wel)) 
    { 
     formPanel.Controls.Remove(wel); 
     formPanel.Controls.Add(pin); 
    } 
    else if (formPanel.Controls.Contains(pin) && Global.Instance.IsAuthenticated) 
    { 
     formPanel.Controls.Remove(pin); 
     formPanel.Controls.Add(mmenu); 
    } 
    else 
    { 
     formPanel.Controls.Remove(pin); 
     formPanel.Controls.Add(wel); 
    } 
} 

/// <summary> 
/// Clean up any resources being used. 
/// </summary> 
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> 
protected override void Dispose(bool disposing) 
{ 
    wel.AddControl -= new EventHandler(SwapControls); 
    pin.AddControl -= new EventHandler(SwapControls); 
    pin.ReturnWelcome -= new EventHandler(SwapControls); 

    if (disposing && (components != null)) 
    { 
     components.Dispose(); 
    } 
    base.Dispose(disposing); 
} 
+0

Danke, dass gearbeitet, das einzige, was ich nicht verstehe, ist, wenn ich die Handler entfernen müssen ... kann ich sie einfach dort lassen ?. – user710502

+0

Wenn Ihre Benutzersteuerelemente immer instanziiert werden, würde ich sie einfach in der Dispose-Methode von Ihrem 'Form' entfernen –

+0

Es tut mir leid, wie würde ich ein Benutzersteuerelement entfernen? im Entsorgungsabschnitt? – user710502

Verwandte Themen