jRosevla Ответов: 1

Как закрыть форму, не закрывая форму, которая ее вызвала.


Привет, пожалуйста, помогите
У меня есть 3 формы,
Form1 вызывает Form2 и отображает его в Form1.Панель1,
Form2 вызывает Form3 и отображает его в Form2.Панель1,
когда я закрываю Form3, он закрывает не только Form3, но и Form2.

Что я уже пробовал:

я пробовал создать eventhandler, но он не работает на мне.

Pete O'Hanlon

Какой код вы используете для закрытия Form3?

jRosevla

я использую кнопку Закрыть в строке заголовка.

Pete O'Hanlon

Я просто высмеял это, и это прекрасно работает для меня. Возможно, вам следует поделиться своим кодом о том, как вы добавили формы друг к другу.

Dave Kreskowiak

У вас есть код, либо в форме 2, либо в форме 3, который делает это. Просто нажав на поле закрыть на Form3, вы не закроете автоматически Form2, если не предоставите для этого какой-то код.

1 Ответов

Рейтинг:
2

Pete O'Hanlon

В вашем проекте добавьте 3 формы (ваше соглашение об именовании предполагает, что вы используете Form1 в качестве основного с Form2 и Form3 в качестве дочерних форм). Добавьте в форму form1 панели и панели на форме Form2. Добавьте кнопку в Form1; эта кнопка будет использоваться для добавления экземпляра Form2 в Панель Form1. В Form2 добавьте кнопку с аналогичной целью; на этот раз цель состоит в том, чтобы добавить экземпляр Form3 в панель в Form2. (Обратите внимание, что в обоих случаях я сохранил имя панелей по умолчанию panel1).

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

public static class PanelManager
{
    public static void AddForm<T>(this Panel panel) where T : Form, new()
    {
        T form = new T
        {
            TopLevel = false,
            TopMost = true
        };
        panel.Controls.Add(form);
        form.Show();
    }
}

Форма 1
В форме 1 добавьте обработчик событий нажатия кнопки и добавьте в него следующий код.
panel1.AddForm<Form2>();
Форма 2В Form2 добавьте обработчик событий нажатия кнопки со следующим кодом:
panel1.AddForm<Form3>();
Запустите приложение и нажмите кнопку в Form1 - это добавит экземпляр Form2 внутри панели. Нажмите кнопку на Form2, чтобы добавить Form3 на панель в Form2. Теперь нажмите кнопку Закрыть в Form3, и это закроет только Form3.


Maciej Los

5ed!

Pete O'Hanlon

Спасибо