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

lx2003

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

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

и по ссылке:


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

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

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

Пока тестирую на одном окне.
Для того, чтобы получить не модальный тип окна winforms использую функцию
Открывает форму как не модальное окно:
F.TopMost = true; // делает форму F поверх всех окон
F.Show(); // открывает форму F как не модальное окно
Для того, чтобы окно не закрывалось после исполнения, предложена функция
Отменяем закрытие формы с помощью OnFormClosing:
protected override void OnFormClosing(FormClosingEventArgs e)
{
// отменяем закрытие формы
e.Cancel = true;
}
Но код выполняется с ошибкой.
Без проверки по OnFormClosing, окно открывается и сразу закрывается. Хотелось бы, чтобы оставалось открытым, пока не будет нажата пользователем кнопка Закрыть.
И пока она не нажата, чтобы была возможность открыть еще одно-два окна или более.

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


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

В последующем может быть открыто более двух окон одновременно.
 
Последнее редактирование:

lx2003

Client
Регистрация
15.02.2021
Сообщения
596
Благодарностей
142
Баллы
43
Полный работающий код на 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);
 

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