Как открыть серию непрерывных форм по одной? - PullRequest
0 голосов
/ 14 июня 2019

В настоящее время у меня есть следующая структура: Form1 получает входные данные. После того, как входы записаны, вы можете нажать кнопку, чтобы перейти к Form2, который динамически создается на основе входов Form1. Form2 собирает больше входных данных, которые будут использоваться на Form3. В каждой форме (т. Е. Form1, Form2, Form3) вы можете вернуться к предыдущему Form на тот случай, если вам потребуется изменить свои входные данные. Для этого я закрою текущий Form и открою его Owner Form, который я записал вручную в своем коде.

Мой текущий метод открытия этих нескольких форм: скрытие текущей формы при переходе к следующей форме, закрытие текущей формы при возврате к предыдущей форме. Образец моего кода:

private void next_Click(object sender, EventArgs e)
{
    List<int> intData = new List<int>();
    //Process intData's members

    this.Hide();
    SecondInputForm form2 = new SecondInputForm(intData);
    form2.Owner = this;
    form2.ShowDialog();
}

Где next - это Button в моем Form1, который позволяет пользователю перейти ко второй форме Form2. В моем Form2 у меня есть аналогичная конструкция, чтобы открыть Form3. Тем не менее, у меня есть другой прослушиватель событий FormClosing, чтобы открыть мою предыдущую форму Form1, когда Form2 закрыт (т.е. возврат к предыдущей форме):

private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{            
    this.Owner.Show();
}

private void next_Click(object sender, EventArgs e)
{
    List<int> intData = new List<int>();
    //Process intData's members

    EquationInput form3 = new EquationInput(intData);
    form3.Show();
    form3.Owner = this;            
    this.Hide();
}

Теперь проблема возникает здесь. Когда я Hide() Form2, он регистрируется как FormClosing событие и каким-то образом закрывает Form2 и в результате закрывает свою «дочернюю» форму Form3. Затем он открывает Form1.

Мой желаемый результат: он скрывает Form2, , но не закрывает его и продолжает сбор данных от пользователя в Form3.

Как лучше подходить к открытию нескольких форм или Как мне исправить текущую проблему, если Hide() -ing форма действительно является лучшим подходом? Я чувствую, что использование Hide() для имитации ряда непрерывных форм на самом деле не «интуитивно», можно сказать.

1 Ответ

1 голос
/ 14 июня 2019

Простой способ справиться с возникшей у вас проблемой - установить для свойства cancel значение true из FormClosing следующим образом:

private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
    this.Hide();     
    this.Owner.Show();
    e.Cancel = true;
}

, но имейте в виду, что вы должны установить какое-то условие для закрытияэто, иначе это никогда не будет закрыто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...