как закрыть текущую форму c

C# Как грамотно закрыть Form?

Здравствуйте, коллеги! Не думал, что будут проблемы с такими вот вещами, но тем не менее. Вот в чем суть проблемы. Разрабатываю программу, в которой из главной Form1, при нажатии на копку я открываю Form2.

Далее уже на Form2 я выполняю код, который заполняет таблицу на Form1, при этом я вывожу данные в таблицу, а затем мне нужно закрыть Form2 сразу.

Так вот в чем проблема: Form2 она то вроде закрывается, но по факту только скрывается. По долгу своей работы, мое приложение должно работать сутками в фоне и получается, что очередной раз пользователь открывает Form2, нажимает там на кнопку, таблица на Form1 заполняется, но Form2 не закрывается, а сворачивается. И так у меня плодятся окна Form1 и Form2 до бесконечности. Как можно это грамотно обыграть? P.s. Пробовал и Form2.ActiveForm.Close() и this.Close() ничего не помогает. Может логическая ошибка где? Помогите, пожалуйста!

3 ответа 3

После закрытия формы через Close() вызовите в первой форме у второй Dispose() и будет вам счастье. Иногда достаточно почитать официальные мануалы.

Два условия, когда форма не удаляется при вызове Close это когда (1) это часть приложения многодокументного интерфейса (MDI) и форма не является видимой; и (2) форма была отображена посредством ShowDialog.

Пример обработчика события по нажатию кнопки в Form2 с изменением свойств объектов формы Form1.

Пример более правильного вызова/создания дочерней формы.

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

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

Источник

Как закрыть текущую форму c

как закрыть текущую форму c. Смотреть фото как закрыть текущую форму c. Смотреть картинку как закрыть текущую форму c. Картинка про как закрыть текущую форму c. Фото как закрыть текущую форму c

как закрыть текущую форму c. Смотреть фото как закрыть текущую форму c. Смотреть картинку как закрыть текущую форму c. Картинка про как закрыть текущую форму c. Фото как закрыть текущую форму c

как закрыть текущую форму c. Смотреть фото как закрыть текущую форму c. Смотреть картинку как закрыть текущую форму c. Картинка про как закрыть текущую форму c. Фото как закрыть текущую форму c

Лучший отвечающий

как закрыть текущую форму c. Смотреть фото как закрыть текущую форму c. Смотреть картинку как закрыть текущую форму c. Картинка про как закрыть текущую форму c. Фото как закрыть текущую форму c

Вопрос

как закрыть текущую форму c. Смотреть фото как закрыть текущую форму c. Смотреть картинку как закрыть текущую форму c. Картинка про как закрыть текущую форму c. Фото как закрыть текущую форму c

как закрыть текущую форму c. Смотреть фото как закрыть текущую форму c. Смотреть картинку как закрыть текущую форму c. Картинка про как закрыть текущую форму c. Фото как закрыть текущую форму c

Имеется многооконное приложение. При запуске вызывается что-то на-подобии «Окна входа», где пользователь вводит, к примеру, логин и пароль. При наличии в базе пары введенный логин-пароль «Окно входа» закрывается и открывается «Основное окно», из которого последовательно вызываются другие окна, а оно закрывается. Понятно, что с привязкой формы к приложению это все организовать не получится(точнее сделать то можно, меняя у форм свойство Visible, но это будет «жрать неимоверное количество памяти», а это не очень хорошо), поэтому в файле «Program.cs» пишу следующий код:

Затем в нужном месте просто пишу что-то на-подобии:

При такой работе практически все работает как надо, но т.к. приложение не зависит от Form, то если пользователь сам закроет окно(не нажав на кнопку, выделенную мной для закрытия), то процесс приложения будет «висеть» в памяти, а это «не есть гуд».

Пытался идентифицировать каким именно способом закрылась форма: с помощью кода

или по нажатию пользователя на «крестик». Но оба этих события передают в метод Form_Closing один и тот же аргумент FormClosingEventArgs, который в поле CloseReason содержит значение UserClosing, т.е. таким макаром не отследить. Подумал: «может создать некоторую переменную типа Boolean, значение в которой изменять по нажатии на мою клавишу для закрытия и в зависимости от её значения завершать процесс приложения или нет», но эта переменная должна быть глобальной, а использование таких переменных также не очень хорошо. В итоге: я встал в тупик.

Может кто-то подскажет каким образом можно корректно реализовать многооконное приложение, чтобы не возникало вышеописанных проблем.

Источник

Как закрыть форму в C#

Ok, поэтому класс Windows Forms, WindowSettings и форма имеют кнопку «Отмена». Когда пользователь нажмет кнопку, появится диалоговое окно DialogSettingsCancel и спросит пользователя, уверен ли он, что хочет выполнить действие. Диалог имеет 2 кнопки, кнопку»Да «и кнопку»Нет». Если пользователь нажимает кнопку «Да», я хочу, чтобы оба DialogSettingsCancel и WindowSettings были закрыты.

мой обработчик событий button_Click в DialogSettingsCancel:

когда я запускаю свое приложение, и перейдите в форму настройки, и нажмите кнопку «Отмена»-кнопка, а затем нажмите кнопку «Да»-кнопка, только DialogSettingsCancel закрывается без закрытия WindowSettings.

почему это не работает?

Я также пытался изменить

но все тот же результат.

7 ответов

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

вместо этого, при показе DialogSettingsCancel установите текущий экземпляр WindowSettings как родитель.

этот подход учитывает, что a DialogSettingsCancel потенциально может быть открыт без WindowsSettings как родитель.

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

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

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

почему бы не использовать метод DialogResult для закрытия формы?

для этого вам нужно будет сделать это внутри формы «WindowSettings» при вызове формы DialogSettingsCancel. Точно так же вы могли бы вызвать OpenFileDialog или любую другую диалоговую форму.

закрытие экземпляра окна настроек сразу после его создания. Сначала вам нужно отобразить окно настроек, а затем дождаться результата диалога. Если он возвращается как отмененный, закройте окно. Например:

отправить WindowSettings в качестве параметра конструктора DialogSettingsCancel и затем на методе button1_click при нажатии yes вызовите метод close обоих из них.

Источник

Как открыть и закрыть форму из другой формы в C# (правильное решение)

как закрыть текущую форму c. Смотреть фото как закрыть текущую форму c. Смотреть картинку как закрыть текущую форму c. Картинка про как закрыть текущую форму c. Фото как закрыть текущую форму c
C# изучаю не так давно и встала передо мной недавно задача:
— открыть Form2 при нажатии на кнопку в Form1;
— спрятать Form1;
— открыть Form1 при закрытии Form2.
На первый взгляд задача показалась элементарной, но… возникли нюансы — при закрытии приложения оно не выгружалось и в диспетчере задач мы наблюдали его работу, хотя визуально оно как бы закрылось.

В чём же причина такого поведения? Об этом расскажу дальше. Рассмотрим открытие и закрытие форм на примерах.

Открываем и закрываем форму из другой формы

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

Чтобы открыть Form2 нам необходим следующий код, который будет срабатывать при нажатии на кнопку:

Теперь у нас открылась Form2 и спряталась Form1. Поработав с Form2 мы её закрываем и при этом нам надо после этого отобразить Form1. Многие начинающие, включая меня начинают писать следующий код, который помещаем в событие, которое происходит после закрытия Form2:

Вроде всё логично: Form2 закрылась, Form1 открылась. Однако используя этот метод, мы можем заметить, что после того как мы закрываем приложение оно продолжает висеть в памяти. Многие, не зная почему это происходит дописывают в метод «Form1_FormClosed» дописывают принудительное закрытие приложения:

Это работает, однако правильно ли это? Решать вам.

А теперь ответим на вопрос «почему приложение висит в памяти» и рассмотрим простое и правильное решение.

Первая часть кода: мы отображаем Form2 и скрываем Form1. Не закрываем, а именно скрываем, т.е. экземпляр Form1 продолжает существовать.

Закрыть Form1 вместо скрытия не получится, так как это главная форма приложения и при её закрытии мы закроем всё приложение.

Вторая часть кода: строкой «Form ifrm = new Form1();» мы создаём второй экземпляр Form1 и далее его и отображаем, а первый экземпляр Form1 продолжает жить в памяти. И когда мы закрываем приложение (Form1), то первый экземпляр при этом не закрываем он так и «сидит» в памяти, поэтому приложение не выгружается из памяти. В связи с этим многие и закрывают принудительно приложение при закрытии главной формы (Form1).

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

OpenForms — получает коллекцию открытых форм приложения. В нашем случае мы сразу обратились к главной форме приложения (OpenForms[0]).

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

Учитываем координаты форм при открытии

Form ifrm = new Form2();
ifrm.ShowDialog();

Это правильное решение, которое всегда будет открывать Form2 поверх Form1 и всегда по центру Form1. Однако этот код не применим, если вам надо скрывать Form1, так как Form1 не будет скрываться.

Сейчас приведу полное решение, которое позволит открывать Form1 и Form2 в той же точке, где находилась до этого форма, вызывающая другую форму. Код включает всё вышеописанное. В свойствах форм надо прописать следующее (прямо в студии выбираете эти значения):

как закрыть текущую форму c. Смотреть фото как закрыть текущую форму c. Смотреть картинку как закрыть текущую форму c. Картинка про как закрыть текущую форму c. Фото как закрыть текущую форму c

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

Открываем форму поверх другой формы, как модальное окно

Чтобы открыть Form2 поверх Form1, как модальное окно, не скрывая Form1, вам хватит этого кода:

В итоге Form2 будет открыта поверх Form1. В этом случае пользователь не сможет переключиться на Form1 не закрыв Form2.

Источник

Закрыть всё формы приложения

Закрытием второй формы закрыть все приложение
Всем доброго времени суток. Помогите пожалуйста, есть к примеру 2-е формы, как сделать так что бы.

Закрыть окно Приложения
Привет. дело в том что у меня есть два окна (форм1 и форм2). первое открываеться при запуске, в.

Закрыть форму, не закрывая всего приложения
Приветствую вас! Появилась такая проблема: При клике на Меню создаю окно: private void.

Вложения

как закрыть текущую форму c. Смотреть фото как закрыть текущую форму c. Смотреть картинку как закрыть текущую форму c. Картинка про как закрыть текущую форму c. Фото как закрыть текущую форму cWindowsFormsApplication.zip (47.0 Кб, 21 просмотров)

Закрыть все работающие потоки при завершении работы приложения
В некоторых случах после закрытия приложения студия выдает следующую ошибку: Error 12 Unable to.

как закрыть текущую форму c. Смотреть фото как закрыть текущую форму c. Смотреть картинку как закрыть текущую форму c. Картинка про как закрыть текущую форму c. Фото как закрыть текущую форму cЗакрыть все открытые формы, отчеты и прочее, кроме одной формы
Добрый день. Подскажите пожалуйста, какой надо написать код, чтобы при нажатии кнопки закрылись все.

По истечению времени закрыть все приложения
Можно ли сделать так? На форме есть TextBox и кнопка. В TextBox ввели цифру, А потом нажали на.

как закрыть текущую форму c. Смотреть фото как закрыть текущую форму c. Смотреть картинку как закрыть текущую форму c. Картинка про как закрыть текущую форму c. Фото как закрыть текущую форму cЗакрыть все формы
Ребят как закрыть все формы в программе.. просто понимаю что идет ошибка из-за form1.Hide;

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *