Code in Main () erreichbar oder nicht erreichbar abhängig von einer anderen Form zu öffnen

StackOverflow https://stackoverflow.com/questions/479368

  •  20-08-2019
  •  | 
  •  

Frage

ich einige Pocket PC app habe, und ich bin ein ernsthaftes Problem mit mit ihm hier beschrieben: https://stackoverflow.com/questions / 472.598 . Während nach einer Lösung, habe ich versucht, einige wirklich ziemlich dumm Code in Main ():

[MTAThread]
        static void Main()
        {
            Application.Run(new Tasks());
            Application.Exit();
        }

und setzen Sie Breakpoint an der Ausfahrt. wenn ich nur die Anwendung ausführen und schließen Sie das Fenster der Haltepunkt erreicht ist. wenn ich die Anwendung ausführen und dann ein anderes Fenster öffnen:

private void questButton_Click(object sender, EventArgs e)
        {
            QuestionnairesWindow questWindow = new QuestionnairesWindow();
            questWindow.Show();
            this.Hide();
}

und dann wieder von ihrem Fenster paraphieren:

private void backButton_Click(object sender, EventArgs e)
        {
            Tasks tasksWindow = new Tasks();
            tasksWindow.Show();
            this.Close();
        }

und schließen Sie die anfänglichen auf die gleiche Weise wie beim ersten Mal, der Apllication.exit () Code nie erreicht ist, und ich habe den Eindruck, dass die Anwendung nicht wirklich geschlossen ist (ich kann es nicht wieder öffnen). sorry, wenn die Beschreibung ist kompliziert

edit: die Frage ist - irgendwelche Ideen, warum es verhält sich anders

?
War es hilfreich?

Lösung

new Tasks() in Main() ist nicht das gleiche Objekt mit Tasks tasksWindow = new Tasks();

Sie haben 2 Objekte von Aufgaben, so zweiten Schließ zunächst noch vorhanden ist und nie stirbt. Sie müssen sich übergeben Sie die Referenz des aktuellen QuestionnairesWindow Tasks.

Sie können das tun mit zusätzlichem QuestionnairesWindow Konstruktor:

private Tasks tasks;

public QuestionnairesWindow(Tasks t)
{
  this.tasks = t;
}

mit:

new QuestionnairesWindow(this).Show(); // where this = current `Tasks` created in `Main`

Andere Tipps

Diese Linie scheint das Problem zu sein:

Tasks tasksWindow = new Tasks();

Wenn ich den Code richtig verstehen, in Ihrem backButton_Click, erstellen Sie eine neue Instanz Ihrer Aufgaben Form, isntead zeigen die, die Sie ursprünglich versteckt. Das bedeutet, dass die Anwendung nicht beendet, denn es gibt immer noch ein Fenster offen, aber versteckt ist.

Was möchten Sie wahrscheinlich tun, gehen die Aufgaben Bezug auf die QuestionnairesWindow Form bilden.

Das Problem, das Sie haben, ist, dass in backButton_Click Sie schaffen eine neue Instanz des Fensters Aufgaben. Das ursprüngliche Fenster Aufgaben läuft noch, wird es nur versteckt. Ich vermute, dass Sie einen Verweis auf die ursprünglichen Aufgaben übergeben müssen Form in die QuestionnairesWindow so es können wählen, es zu zeigen, wieder.

Sie müssen entweder ein öffentliches / internes Verfahren auf Ihrem QuestionnairesWindow hinzufügen, wo Sie, welche Aufgaben Form gesetzt die QuestionnairesWindow verursacht zu öffnen. Sie rufen diese Methode in questButton_Click mit der dieser Referenz vor this.Hide zu () aufrufen. Diese Referenz wird in einer privaten Variable innerhalb des QuestionnairesWindow gespeichert werden.

Dann in der backButton_Click, können Sie diese private Variable verwenden, für die .Show () -Methode aufrufen, die übergeordnete Form zu zeigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top