Wie können Sie feststellen, ob ein Formular vom Benutzer oder von Ihrem Code geschlossen wurde?

Ich habe ein Formular (nennen wir es übergeordnetes Formular), aus dem ein anderes Formular "Immer im Vordergrund, aber nicht modal" geladen werden kann (wie ein Dialogfeld, aber kein Dialogfeld - Benutzer können das neue "untergeordnete Formular" dort belassen, wo es ist, und fortfahren das übergeordnete Formular bearbeiten).

Wenn der Benutzer das untergeordnete Formular zum ersten Mal öffnet, werden einige Daten geladen und angezeigt. Sollten sie das Formular schließen, fange ich das Schließen tatsächlich ab und verstecke es einfach - damit wir die Daten beim nächsten Öffnen nicht erneut laden müssen (es sind keine Daten, die sich, wenn überhaupt, sehr stark ändern).

if (e.CloseReason == CloseReason.UserClosing)
{
    e.Cancel = true;
    this.Hide();
}

Später, wenn das übergeordnete Formular geschlossen wird, möchte ich das untergeordnete Formular zum ordnungsgemäßen Schließen zwingen - indem Code in seinem Basisformular ausgeführt wird, um seinen Speicherort und seine Größe für das nächste Mal zu speichern.

Zur Zeit rufe ich anchildForm.Dispose () von der Elternform, die die Sache schön aufräumt, mir aber nicht viel Kontrolle gibt.

Wenn ich jedoch die childForm.Close () -Methode aufrufe, lautet der e.CloseReason weiterhin "CloseReason.UserClosing".

Gibt es eine Möglichkeit, zwischen dem Benutzer, der das Formular schließt, und meinem Code (im übergeordneten Formular), der das Formular schließt, zu unterscheiden?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage