Как закрыть предыдущую форму в c при открытии новой
Перейти к содержимому

Как закрыть предыдущую форму в c при открытии новой

  • автор:

Закрытие старой формы при переходе на новую

Открытие новой формы и закрытие старой
AuthForm f = new AuthForm(); this.Close(); f.Show(); так например.

Как создать новую базу в 1с бухгалтерия и перенести данные из старой базы в новую?
Доброго времени суток: подскажите пожалуйста начинающиму администратору: как создать новую ИБ в 1С.

если поверх старой виндовс ставить новую, что при этом изменится ?
если поверх старой виндовс ставить новую, что при этом изменится ? ( домашнию версию на ультимайт)

Выполнение сценария при переходе на новую страницу
В общем имеется скрипт (silent.js) который скрывает div. Как сделать так чтобы при переходе по.

Забавный вопрос, непонятно только зачем такой ход, но ответ может быть такой:

Создаем класс который и будет управлять формами:
FormManager.cs

Теперь создаем две формы наследующиеся от FormSample и добавляем событие клика мыши на клиентской части формы, которое в Form1 открывает Form2 и закрывает Form1, а в Form2 закрывает приложение:

Как закрыть главную форму при открытии дочерней?

Обработчик кнопки главной формы которая открывает дочернее окно.

Конструктор дочерней формы

В итоге закрываются обе формы при открытии дочерней.

Uranus's user avatar

Aleksey's user avatar

Если в Visual Studio создать новый WinForms проект и посмотреть код в файле Program.cs, можно увидеть что приложение запускается вот такой строчкой:

Этот код неявно создает новый экземпляр ApplicationContext, который подписывается у переданной формы на событие FormClosed. Когда возникает событие FormClosed , ApplicationContext вызывает метод Application.ExitThread, который закрывает все окна и завершает приложение.

Можно сделать свой собственный ApplicationContext, что позволяет управлять жизненным циклом приложения по своему усмотрению. Вот такое приложение, например, никогда самостоятельно не завершается, его нужно будет завершать из диспетчера задач.

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

Теперь главное только следить за тем, чтобы у пользователя была возможность закрыть все формы. Нельзя допускать чтобы последняя форма не имела кнопки в правом верхнем углу и не обрабатывала Alt+F4.

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

Вы закрываете вызывающую форму в конструкторе дочерней. В этот момент дочерняя форма все еще не открыта, и Application.OpenForms окажется пустым, что приведет к завершению приложения.

Можно перенести код, закрывающий вызывающую форму в метод OnShown .

А проще сделать так, чтобы вызывающая форма закрывала сама себя.

Метод ShowDialog открывает модальное окно. Оно зависит от родительского окна, и закрывается вместе с ним. Если вызывающая форма это единственное открытое окно на данный момент, она автоматически становится родительской для Form2 . Для того, чтобы разорвать связь с вызывающей формой, показывайте Form2 с помощью метода Show.

Бонус

В описанном сценарии, вам наверняка нет нужды, чтобы форма, которую вы показали первоначально, оставалась висеть в памяти после ее закрытия. Однако, Form1 это локальная переменная метода Main . Ссылка на Form1 будет хранится на стеке до тех пор, пока приложение не завершатся.

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

Постскриптум

Идея в том, что приложение начинается с формы ввода логина и пароля, эта форма появляется первой, а значит главная. После нажатия баттона Log In форма ввода логина и пароля исчезает и появляется основное окно.

c # открыть новую форму, а затем закрыть текущую форму?

Например, предположим, что я нахожусь в форме 1, тогда я хочу:

  1. Открыть форму 2 (с кнопки в форме 1)
  2. Закрыть форму 1
  3. Сосредоточьтесь на форме 2

Ужасное удобство использования. Если вы используете WinForms, просто создайте окно контейнера и замените вместо него панели. Ваши пользователи будут любить вас за это (и ненавидеть за то, что вы этого не делаете) — Claus Jørgensen

Слушай Клауса! Возможно, вы пытаетесь достичь: a) Winforms-реализация последовательной серии шагов, подобной мастеру, или b) попытка показать форму «результат» после формы «ввод / отправка данных». Независимо от того, а) или б) поведение пользовательского интерфейса, которое вы пытаетесь реализовать, является неоптимальным решением. — Simen S

Большое спасибо Clause и Simen S. Ваши комментарии очень полезны для такого новичка, как я. Я прочитаю больше руководств по графическому интерфейсу и удобству использования. Не могли бы вы порекомендовать мне несколько полезных? — tnhan07

Отметьте также [ответы здесь] (stackoverflow.com/questions/4759334/…), если вы действительно намеревались иметь форму входа (или аналогичную). — ilias iliadis

15 ответы

Решение Стива не работает. При вызове this.Close () текущая форма удаляется вместе с form2. Поэтому вам нужно скрыть его и установить событие form2.Closed для вызова this.Close ().

в формах окон в точечной сети нет события Closed. Можете ли вы сказать мне, что это событие FormClosed — Анджали

Разве скрытие первой формы не сохраняет ее в памяти? Как мы можем освободить этот ресурс? — user2635088

form2.Closed += (s, args) => this.Close(); Могу я узнать, как работает это заявление? что именно (s,args) является? — Яш Сарайя

(s, args) => this.Close(); является лямбда-выражением. Он создает функцию «на месте», которая вызывается, когда form2.Closed событие запущено. (s, args) это просто имена параметров лямбда. Что для обработчика событий обычно выглядит примерно так: (object sender, EventArgs e) . Потому что Closed подпись делегата события описывает их типы, типы не указаны (кто-нибудь, пожалуйста, исправьте мою формулировку, если нужно). // В целом это просто хитрый способ не объявлять всю функцию (обработчик событий) за пределами текущей, которая обрабатывает Form2.Closed мероприятие. — КДекер

он просто скрывает первую форму и открывает новую форму, но не закрывает первую форму — Уддян Семвал

В других ответах уже описано много разных способов. Однако многие из них либо участвовали ShowDialog() или, что form1 оставайтесь открытыми, но скрытыми. На мой взгляд, лучший и интуитивно понятный способ — просто закрыть form1 а затем создать form2 из внешнего местоположения (то есть не изнутри любой из этих форм). В случае, когда form1 был создан в Main , form2 можно просто создать с помощью Application.Run как form1 перед. Вот пример сценария:

Мне нужно, чтобы пользователь ввел свои учетные данные, чтобы я как-то их аутентифицировал. Впоследствии, если аутентификация прошла успешно, я хочу показать пользователю главное приложение. Для этого я использую две формы: LogingForm и MainForm , LoginForm имеет флаг, определяющий, была ли аутентификация успешной или нет. Затем этот флаг используется, чтобы решить, создавать ли MainForm экземпляр или нет. Ни одна из этих форм не должна знать о другой, и обе формы можно изящно открывать и закрывать. Вот код для этого:

ответ дан 14 апр.

Это приятный трюк, чем сокрытие форм. Когда у нас есть скрытые формы для выхода из приложения, недостаточно просто закрыть текущую форму. Мы должны использовать Application.Exit (0) и т. Д. — Пек_коньон

Приятно, но мне кажется, подходит только для 2-х форм. А как насчет переключения между несколькими формами ?? — Доктор МАФ

How to Close Form1 and Open Form2 in C#

There is a common and simple requirement in windows applications to Open a new form(say Form2) when clicked a button in Form1 and also close Form1 at the same time.

Table of Contents

On Button Click Open Form 2 and Close Form 1

There are many ways you can close current form and open a new form in .NET.See below,

1) Close Form1 and Show Form2 – C#

2) Use Application.Run for each form in Main() method

Then Update the Main() method as below.

3) Hide Form1 and Show Form2 – C#

Here Form1 will remain open as long as the application is live.This option is the worst and hence not at all suggested.

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

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