2016-07-05 8 views
-4

Ich arbeite mit Winforms.Wie dispose offene UserControl in Ereignis?

Ich habe eine Funktion, die ihre UserControl entsorgt.

Ich rief das, wenn ich auf ein Etikett klickte und es funktionierte gut (tut es immer noch). Nun wurde ein devexpress Steuerelement hinzugefügt, das wie zuvor beim Klicken sein eigenes Steuerelement zur Verfügung stellt. Ich rufe die gleiche Funktion wie mit der Bezeichnung, aber nachdem das Ereignis beendet ist, bekomme ich eine Null Pointer-Ausnahme, wo ich mein Mainform erstelle (das nirgendwo entsorgt wird).

Was fehlt mir hier. Ich habe gehört, dass es problematisch ist, die eigene Benutzersteuerung zu zerstören, aber warum funktioniert das, wenn ich auf das Label klicke und nicht, wenn ich auf das andere Benutzer-Steuerelement klicke? Kann jemand eine Erklärung oder eine Lösung geben? Vielen Dank!

private void DoDispose() 
{ 
    this.Dispose(); 
} 

private void breadCrumbEdit1_Properties_NodeClick(object sender, BreadCrumbNodeClickEventArgs e) 
{ 
    DoDispose(); 
} 

private void label1_MouseClick(object sender, MouseEventArgs e) 
{ 
    DoDispose(); 
} 
+1

Bitte geben Sie ein Beispiel des Codes, der das Problem verursacht, da es sonst nur raten. –

+0

Entfernen Sie alle Event-Handler und usercontrol von winform und bevor Sie den usercontrol ablegen. –

+0

@ BarryO'Kane hat es getan. – joohaha

Antwort

1

Du nennst Dispose() auf this, die in diesem Fall würde die Mutterform.

Angenommen, Sie übergeben ein Control Objekt, ändern Sie, Ihren Code so;

public void DoDispose(object control) 
{ 
    ((Control)object).Dispose(); 
} 

Invoke als DoDispose(sender)

Jetzt sind Sie Dispose() auf das Objekt aufrufen, die Sie als Argument übergeben, sondern dass das übergeordnete Formular.

+0

Ich habe es geändert, wie du sagtest, aber es funktioniert nicht. + erklärt nicht, warum die Funktion funktioniert, wenn ich auf das Label klicke – joohaha

Verwandte Themen