Code dans Main () accessible ou inaccessible selon l'ouverture d'une autre forme

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

  •  20-08-2019
  •  | 
  •  

Question

J'ai une application pour Pocket PC et j'ai un grave problème décrit ici: https://stackoverflow.com/questions / 472598 . En cherchant une solution, j’ai essayé du code assez stupide dans Main ():

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

et définissez le point d'arrêt à la sortie. si je viens d'exécuter l'application, puis fermez la fenêtre, le point d'arrêt est atteint. si je lance l'application, puis ouvre une autre fenêtre:

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

puis revenez à la fenêtre initiale:

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

et fermez l'initiale de la même manière que la première fois, le code Apllication.exit () n'est jamais atteint et j'ai l'impression que l'application n'est pas vraiment fermée (je ne peux pas l'ouvrir à nouveau). désolé si la description est compliquée

modifier: la question est la suivante: des idées, pourquoi se comporte-t-il différemment?

Était-ce utile?

La solution

new Tasks() dans Main() n’est pas le même objet avec Tasks tasksWindow = new Tasks();

Vous avez 2 objets de tâches, donc fermer la première, le premier est toujours présent et ne meurt jamais. Vous devez passer à QuestionnairesWindow la référence du courant Tasks.

Vous pouvez le faire avec un <=> constructeur supplémentaire:

private Tasks tasks;

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

en utilisant:

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

Autres conseils

Cette ligne semble être le problème:

Tasks tasksWindow = new Tasks();

Si je comprends bien votre code, dans votre backButton_Click, vous créez une nouvelle instance de votre formulaire de tâches, mais ne permet plus d'afficher celle que vous avez cachée à l'origine. Cela signifie que l'application ne se termine jamais, car il reste toujours une fenêtre ouverte mais cachée.

Ce que vous voulez probablement faire est de passer la référence du formulaire Tâches au formulaire QuestionnairesWindow.

Le problème que vous avez est que, dans backButton_Click, vous créez une nouvelle instance de la fenêtre Tâches. La fenêtre de tâches d'origine est toujours en cours d'exécution, elle est simplement masquée. Je suppose que vous devez passer une référence au formulaire de tâches d'origine dans QuestionnairesWindow afin qu'il puisse choisir de l'afficher à nouveau.

Vous devez soit ajouter une méthode publique / interne à votre QuestionnairesWindow pour définir le formulaire de tâches à l'origine de l'ouverture de QuestionnairesWindow. Vous appelez cette méthode dans questButton_Click avec la référence this avant d'appeler this.Hide (). Cette référence sera stockée dans une variable privée dans la QuestionnairesWindow.

Ensuite, dans le backButton_Click, vous utilisez cette variable privée, pour appeler la méthode .Show (), pour afficher le formulaire parent.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top