Код в Main() доступен или недостижим в зависимости от открытия другой формы

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

  •  20-08-2019
  •  | 
  •  

Вопрос

У меня есть какое-то приложение для карманных ПК, и у меня возникла серьезная проблема с ним, описанная здесь: https://stackoverflow.com/questions/472598 .В поисках решения я попробовал какой-то на самом деле довольно глупый код в Main():

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

и установите точку останова при выходе.если я просто запущу приложение, а затем закрою окно, точка останова будет достигнута.если я запущу приложение, а затем открою другое окно:

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

а затем вернитесь из него в исходное окно:

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

и закройте начальный так же, как и в первый раз, код Apllication.exit() так и не был достигнут, и у меня сложилось впечатление, что приложение на самом деле не закрыто (я не могу открыть его снова).извините, если описание сложное

Редактировать:вопрос в том, есть ли какие-нибудь идеи, почему он ведет себя по-другому?

Это было полезно?

Решение

new Tasks() в Main() не является одним и тем же объектом с Tasks tasksWindow = new Tasks();

У вас есть 2 объекта Задач, поэтому, закрыв второй, первый все еще присутствует и никогда не умирает.Вам нужно перейти к QuestionnairesWindow ссылка на текущий Tasks.

Вы можете сделать это с помощью дополнительных QuestionnairesWindow конструктор:

private Tasks tasks;

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

используя:

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

Другие советы

Эта строка, похоже, и есть проблема:

Tasks tasksWindow = new Tasks();

Если я правильно понимаю ваш код, в вашем backButton_Click вы создаете новое экземпляр вашей формы Задач вместо того, чтобы показывать ту, которую вы изначально скрыли.Это означает, что приложение никогда не завершается, потому что все еще остается одно открытое, но скрытое окно.

Что вы, вероятно, хотите сделать, это передать ссылку на форму Заданий в форму QuestionnairesWindow.

Проблема, с которой вы столкнулись, заключается в том, что в backButton_Click вы создаете новое экземпляр окна Задач.Исходное окно Задач все еще запущено, оно просто скрыто.Я подозреваю, что вам нужно передать ссылку на исходную форму Tasks в QuestionnairesWindow, чтобы она могла показать ее снова.

Вам либо нужно добавить общедоступный / внутренний метод в ваш QuestionnairesWindow, где вы указываете, какая форма задач вызвала открытие QuestionnairesWindow.Вы вызываете этот метод в questButton_Click с помощью это ссылка перед вызовом этого.Скрыть().Эта ссылка будет сохранена в закрытой переменной внутри QuestionnairesWindow.

Затем в backButton_Click вы используете эту закрытую переменную для вызова .Метод Show() для отображения родительской формы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top