Откройте существующую форму из основной формы

Я разработал две формы: Form1 а также Form2, Form1 это основная форма. Есть кнопка в Form1, если я нажму кнопку, то Form2 выскочит. Я хочу сделать что-то на Form2,

// click button in Form1.
private void button1_Click(object sender, EventArgs e)
    {
        Form form2= new Form();
        form2.ShowDialog();
    }

Но Form2 это новая форма, а не существующая форма.

Это неверно.

Как? Благодарю.

5 ответов

Решение

Вы создаете экземпляр класса Form, а не Form2, который есть в вашем проекте. Создайте экземпляр Form2, который вы создали ранее, и затем вызовите в нем ShowDialog.

Вы могли заметить в файле program.cs что-то вроде Application.Run(new Form1()); Здесь мы создаем экземпляр Form1 и переходим к методу Run.

Сделайте это таким образом, создав экземпляр Form2 и вызвав метод ShowDialog(), чтобы показать его

Form2 form2= new Form2();
form2.ShowDialog();
 private void button1_Click(object sender, EventArgs e)
        {
            InputForm form1 = new InputForm();
            form1.Show();
        }

Здесь InputForm означает, какую форму вы хотите открыть.

Вы создаете пустую форму с

Form Form2= new Form();

Вы должны использовать

Form2 form2= new Form2();

Полный код:

private void button1_Click(object sender, EventArgs e)
    {
        Form2 form2= new Form2();
        form2.ShowDialog();
    }

Вопрос "Откройте существующую форму из основной формы"

Хорошо, давайте немного изменим его. Откройте существующий экземпляр формы из основной формы.

когда вы показываете форму

new Form2().Show();

допустим, вы спрятали его, используя

Form2.Hide();

вы, ребята, можете использовать это

var Form2_instance = Application.OpenForms.OfType<Form2>().Single();
Form2_instance.Show();

Декларировать

Form2 form2= new Form2();

как ваш ученик и использовать его так:

private void button1_Click(object sender, EventArgs e)
{

        form2.ShowDialog(); //blocking call 

       //or form2.Show() //non blocking call
}

РЕДАКТИРОВАТЬ

Основываясь на правильных комментариях, чтобы сделать эту работу вместо выполнения Close() на функции, которая приведет к Dispose() вам нужно использовать form2.Hide() сделать просто невидимым

Другие вопросы по тегам