2017-12-22 4 views
0

So versuche ich, das aktuelle Formular (form1) UND ein anderes Formular (form2) zu schließen, dann zeigen Sie form3.Schließen eines Formulars aus einem anderen Formular

whatsapp wForm = new whatsapp(); 
wForm.Close(); 
this.Close(); 

login logForm = new login(); 
logForm.Show(); 

ich das Anmeldeformular auf frühere Stadien (this.Hide()) versteckt hatte, Es gibt einen Knopf auf dem Login-Formular, das die whatsapp Form zeigt, und die whatsapp Form eine Taste hat, die die Einstellung Form zeigt (was das aktuelle Formular über form1), die ich unter Verwendung gezeigt habe (settings f = new settings(); f.DialogShow();)

Jetzt versuche ich, sowohl die Einstellungen und WhatsApp-Formulare zu schließen, und zeigen Sie das Login-Formular.

+0

Google ist dein Freund :) – Missy

Antwort

0

Ich vermute, dass diese hier Beitrag wird dies perfekt für Sie beantworten: Open Form2 from Form1, close Form1 from Form2

einen Konstruktor auf das Kind Form verwenden, die Formulare in den entsprechenden Eltern als Argumente können Sie die Stammformen Close() Methode für den Zugriff innerhalb das Kind.

1

Sie können in eine echte Sauerei geraten, wenn ein Formular ein anderes steuert, es sei denn, es gibt eine bestimmte Eltern/Kind-Beziehung.

Ich würde vorschlagen, dass Sie ein einzelnes steuerndes Objekt, z. eine FormController-Klasse (das ist etwas, was Sie selbst erstellen würden) und lassen Sie die Präsentation Ihrer beiden Formulare von dort aus steuern.

Neben der Ordnung der Beziehung zwischen Ihren Objekten erhalten Sie eine bessere Single-Responsibility-Mapping - was ich damit meine, ist es sollte nicht die Verantwortung einer Form, um eine andere zu kontrollieren. Wenn eine Aktion für ein Formular ausgeführt wird, wird stattdessen einfach ein Ereignis ausgelöst, um jedem mitzuteilen, dass die Aktion stattgefunden hat. Wenn es niemanden interessiert, dann ist das das Ende, aber in diesem Fall würde ein FormController sein Interesse für das Ereignis registrieren, und wenn er ausgelöst würde, wäre es die Aufgabe des Fenstercontrollers, dieses Ereignis anzuhören und entsprechend zu behandeln, dh in diesem Fall, der die Sichtbarkeit/Existenz eines anderen Formulars beeinflusst.

Hier ist ein sehr grobes Beispiel dafür, was ich meine:

public class FormController 
{ 
    private readonly WhatsappForm whatsappForm = new WhatsappForm(); 
    private readonly LoginForm loginForm = new LoginForm(); 

    public FormController() 
    { 
     loginForm.SomeActionPerformed += HandleLoginActionPerformed; 
    } 

    private void HandleLoginActionPerformed(object sender, EventArgs e) 
    { 
     whatsappForm.Show(); 
    } 
} 

Wo SomeActionPerformed eine Veranstaltung der Login-Formular angehoben ist, so:

partial class LoginForm 
{ 
    ... 

    public event EventHandler SomeActionPerformed; 
} 
+1

Sie erhöhen sehr wichtige Punkte, so habe ich bereits meine Upvote gegeben. Aber vor allem für jemanden, der wahrscheinlich ein neuer Benutzer ist, mit einem Beispielcode für Ihren FormController und dessen Verwendung würde dies eine noch bessere Antwort geben. –

Verwandte Themen