Два и более двух окон WinForms не модального типа одновременно

  • Автор темы Автор темы lx2003
  • Дата начала Дата начала

lx2003

Client
Регистрация
15.02.2021
Сообщения
819
Реакции
158
Баллы
43
Здравствуйте!

С Вашего разрешения, продублирую вопрос, заданный в темах по ссылке:

и по ссылке:


Может кто подсказать?

Мне нужно два окна winforms, которые оба будут открыты одновременно.

Чтобы оба были открыты одновременно, по идее, необходимо использовать не модальный тип окон.

Пока тестирую на одном окне.
Для того, чтобы получить не модальный тип окна winforms использую функцию
Открывает форму как не модальное окно:
Развернуть Свернуть Копировать
F.TopMost = true; // делает форму F поверх всех окон
F.Show(); // открывает форму F как не модальное окно

Для того, чтобы окно не закрывалось после исполнения, предложена функция
Отменяем закрытие формы с помощью OnFormClosing:
Развернуть Свернуть Копировать
protected override void OnFormClosing(FormClosingEventArgs e)
{
// отменяем закрытие формы
e.Cancel = true;
}

Но код выполняется с ошибкой.
Без проверки по OnFormClosing, окно открывается и сразу закрывается. Хотелось бы, чтобы оставалось открытым, пока не будет нажата пользователем кнопка Закрыть.
И пока она не нажата, чтобы была возможность открыть еще одно-два окна или более.

Дальнейший процесс работы с окнами может быть связан с передачей данных или значений, а может быть и объектов окна, из одного окна в другое.
Либо различные окна с различными данными.


Что можно сделать и как правильно все это прописать?
Подскажите, пожалуйста.

В последующем может быть открыто более двух окон одновременно.
 
Последнее редактирование:
Полный работающий код на C#, выполняющийся в кубике "Свой C# код" выглядит следующим образом:

Создаем не модальную форму WinForms:
Развернуть Свернуть Копировать
// Создаем форму WinForms
System.Windows.Forms.Form form = new System.Windows.Forms.Form();

// Задаем свойства формы, такие как заголовок, размер, цвет и т.д.
form.Text = "Не модальное окно";
form.Size = new Size(300, 200);
form.BackColor = Color.LightBlue;


//form.Cancel = true;


// Добавляем на форму кнопку с текстом Закрыть
Button button = new Button();
button.Text = "Закрыть";
button.Location = new Point(100, 100);
button.Size = new Size(100, 50);

//// Добавляем обработчик события Click для кнопки, который будет закрывать форму
//button.Click += new EventHandler(button_Click);

// Добавляем кнопку на форму
form.Controls.Add(button);

form.TopMost = true; // делает форму form поверх всех окон
// Открываем форму как не модальное окно с помощью метода Show
form.Show();


В коде закомментирована строка form.Cancel=true;, где был код:

OnFormClosing:
Развернуть Свернуть Копировать
protected override void OnFormClosing(FormClosingEventArgs e)

{

// отменяем закрытие формы

e.Cancel = true;

}


А также закомментировал строку обработки нажатия кнопки Закрыть, т.к. это вызывает ошибку для всего примера кода:

Закомментированный обработчик события Click для кнопки Закрыть:
Развернуть Свернуть Копировать
//// Добавляем обработчик события Click для кнопки, который будет закрывать форму

//button.Click += new EventHandler(button_Click);
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)