Взять под контроль другую уже открытую форму в C # - PullRequest
0 голосов
/ 29 июля 2011

Я использую Compact Framework 2.0 для приложения в Windows CE 5.0.

У меня проблемы с переключением контроля между разными формами.

Я создал простой пример, чтобы показать это.

Представьте, что у вас есть две формы, у первой формы есть кнопка для загрузки второй формы.

Когда вы нажимаете кнопку и загружается вторая форма, вы можете захотеть иметь элемент управления для возврата к первой форме или просто хотите закрыть первую форму после загрузки второй формы.

Вот пример закрытия первой формы после загрузки второй:

public partial class Form1 : Form
{
    private void button1_Click(object sender, EventArgs e)
    {
        this.Close();
        Form2 secondForm = new Form2();
        secondForm.Show();            
    }
}

Но, к сожалению, это закрывает обе формы, а не только текущую (form1).

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

Есть предложения?

Ответы [ 2 ]

4 голосов
/ 29 июля 2011

Причина закрытия обеих форм в том, что родитель Form2 - это Form1. WinForms работает так, что если родительский элемент закрыт (this.Close()), тогда все дочерние элементы будут закрыты автоматически.

Типичный способ сделать это - использовать secondForm.ShowDialog (). Это сохранит первую форму в фоновом режиме, но сделает ее недоступной для выбора. Если вы хотите избавиться от текущей формы, то вместо этого скройте ее:

this.Hide();
Form2 secondForm = new Form2();
secondForm.Show();

Возможно, вам понадобится метод, подключенный к событию secondForm.Closed для вызова this.Show(), чтобы обеспечить повторное появление вашей формы.

0 голосов
/ 29 июля 2011

Form1 - это ваша MainForm, которая создается и запускается в Program.cs. Если эта форма закрыта. Вся заявка заканчивается. Попытайтесь скрыть форму Form1, как было показано ранее, или используйте Controller-Class для координации обеих форм.

...