-
Use the
Close()
Method to Close Form in C# -
Set the
DialogResult
Property in Windows Forms to Close Form in C# -
Use the
Application.Exit
Method to Exit the Application in C# -
Use the
Environment.Exit
Method to Exit the Application in C# -
Use the
Form.Hide()
Method to Hide Form in C# -
Use the
Form.Dispose()
Method to Dispose Form in C# -
Conclusion
Closing a form is a fundamental operation in C# application development. Whether you’re building a Windows Forms Application or a Windows Presentation Foundation (WPF) Application, understanding how to close a form correctly is crucial for maintaining your application’s integrity and user experience.
This tutorial will explore different methods for closing a form in C# and provide step-by-step explanations and working code examples for each method.
Use the Close()
Method to Close Form in C#
The most straightforward way to close a form in C# is by using the Close()
method. This method is inherited from the System.Windows.Forms.Form
class and is available for Windows Forms and WPF applications.
Inside Form1
, we have a button (closeButton
) that, when clicked, calls this.Close()
to close the form.
using System;
using System.Windows.Forms;
namespace close_form {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void closeButton_Click(object sender, EventArgs e) {
this.Close();
}
}
}
In the above code, we closed the form in our Windows Forms application that only consists of one form with the Close()
method in C#.
This method only closes a single form in our application. It can also close a single form in an application that consists of multiple forms.
Set the DialogResult
Property in Windows Forms to Close Form in C#
In Windows Forms applications, you can use the DialogResult
property to close a form and indicate a specific result to the caller. This is often used when the form acts as a dialog box or a modal form.
using System;
using System.Windows.Forms;
namespace DialogResultDemo {
public partial class MainForm : Form {
public MainForm() {
InitializeComponent();
}
private void okButton_Click(object sender, EventArgs e) {
this.DialogResult = DialogResult.OK; // Set the DialogResult
this.Close(); // Close the form
}
private void cancelButton_Click(object sender, EventArgs e) {
this.DialogResult = DialogResult.Cancel; // Set the DialogResult
this.Close(); // Close the form
}
}
static class Program {
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
// Show the MainForm as a dialog
if (new MainForm().ShowDialog() == DialogResult.OK) {
MessageBox.Show("OK button clicked.");
} else {
MessageBox.Show("Cancel button clicked or form closed.");
}
}
}
}
In the above code, we create a Windows Forms application with a form named MainForm
containing two buttons (okButton
and cancelButton
). When the OK
or Cancel
button is clicked, we set the DialogResult
property accordingly and then call this.Close()
to close the form.
Use the Application.Exit
Method to Exit the Application in C#
The Application.Exit()
method is used to close the entire application in C#. This method informs all message loops to terminate execution and closes the application after all the message loops have terminated.
We can also use this method to close a form in a Windows Forms application if our application only consists of one form.
However, use this method with caution. It’s essential to make sure that it’s appropriate to exit the entire application at that point, as it can lead to unexpected behavior if other forms or processes need to be closed or cleaned up.
using System;
using System.Windows.Forms;
namespace close_form {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void exitButton_Click(object sender, EventArgs e) {
Application.Exit();
}
}
}
In the above code, when the Exit
button is clicked, we call Application.Exit()
to exit the entire application.
The drawback with this method is that the Application.Exit()
method exits the whole application. So, if the application contains more than one form, all the forms will be closed.
Use the Environment.Exit
Method to Exit the Application in C#
While it’s possible to close an application by calling Environment.Exit(0)
, it is generally discouraged.
This method forcefully terminates the application without allowing it to clean up resources or execute finalizers. It should only be used as a last resort when dealing with unhandled exceptions or critical issues.
using System;
using System.Windows.Forms;
namespace EnvironmentExitDemo {
public partial class MainForm : Form {
public MainForm() {
InitializeComponent();
}
private void exitButton_Click(object sender, EventArgs e) {
Environment.Exit(0); // Forcefully exit the entire application
}
}
}
In the above code, when the Exit
button is clicked, we call Environment.Exit(0)
to forcefully exit the entire application. This should be used sparingly, as it does not allow proper cleanup.
Application.Exit()
is specific to Windows Forms applications and provides a controlled, graceful exit, while Environment.Exit()
is a general-purpose method that forcibly terminates the application without any cleanup or event handling.
Use the Form.Hide()
Method to Hide Form in C#
Sometimes, you want to hide the form instead of closing it; you can use the Form.Hide()
method to do this. The form remains in memory and can be shown again using this.Show()
or this.Visible = true;
.
using System;
using System.Windows.Forms;
namespace FormHideDemo {
public partial class MainForm : Form {
public MainForm() {
InitializeComponent();
}
private void hideButton_Click(object sender, EventArgs e) {
this.Hide(); // Hide the form
}
private void showButton_Click(object sender, EventArgs e) {
this.Show(); // Show the hidden form
}
}
}
In the above code, we create a Windows Forms application with a form named MainForm
containing two buttons (hideButton
and showButton
).
When clicking the Hide
button, we call this.Hide()
to hide the form. When clicking the Show
button, we call this.Show()
to show the hidden form.
Use the Form.Dispose()
Method to Dispose Form in C#
You can explicitly dispose of a form and release its resources using the Form.Dispose()
method. It should be used when you explicitly want to release resources associated with the form, but it does not close its window.
using System;
using System.Windows.Forms;
namespace FormDisposeDemo {
public partial class MainForm : Form {
public MainForm() {
InitializeComponent();
}
private void disposeButton_Click(object sender, EventArgs e) {
this.Dispose(); // Dispose of the form
}
}
}
In the above code, when clicking the Dispose
button, we call this.Dispose()
to explicitly dispose of the form. This should be used when you want to release resources associated with the form.
Conclusion
Closing a form in C# involves several methods and considerations, depending on your application’s requirements. We have explored various methods, including using the Close()
method, setting the DialogResult
property, exiting the application, hiding the form, and disposing of the form.
Choosing the right method depends on your specific use case. Understanding when and how to use each method is crucial to ensure your application behaves as expected and provides a seamless user experience.
By mastering form closure techniques in C#, you can develop robust and user-friendly applications that meet the needs of your users while maintaining code integrity and resource management.
Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
Building an exit, close, or quit button is one of the first steps a programmer needs to learn when developing in C# Visual Studio. This article describes how to build the form and generate the code needed for this task. Screencast is included as well.
I’ll walk you through the steps with pictures. Plus, there is a video screencast at the end for a more detailed explanation.
What if you want someone to be able to exit your program by clicking a button? Using a simple button control and one line of code, you can make it happen.
1 Create a new button control on your C# form by dragging and dropping “button” control from the toolbox window to your form.
2 In your properties window, give the button a meaningful name. This will be the name that you will use as reference in the code.
Adjust the additional properties that your button control requires. To clarify, Text property is your front-facing button text, and Name is your code reference name for the button.
3 Your physical button should now reflect the name you gave it.
4 Double click the “Exit” button on the GUI and this will switch to code view and automatically create a class for your exit button. As shown below, edit the click event for the button, and the code will execute when the button is clicked.
5 For our button to exit on click we need to enter the following code:
this.Close();
This code tells our program on the click event of this specific button, close THIS form.
6 Save your program and run it. Your program will exit when you click the exit button.
Chris Luongo
Chris is a self-taught web designer and developer out of Atlanta, GA. This geek enjoys coffee, cold brews, bike riding, and twisting any form of tech into submission.
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
- 1) Close Form1 and Show Form2 – C#
- 2) Use Application.Run for each form in Main() method
- 3) Hide Form1 and Show Form2 – C#
- Summary
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#
private void btnLogin_Click(object sender, EventArgs e)
{
this.Close(); //Close Form1,the current open form.
Form2 frm2 = new Form2();
frm2.Show(); // Launch Form2,the new form.
}
2) Use Application.Run for each form in Main() method
//Declare a boolean property.This property to be set as true on button click.
public bool IsLoggedIn { get; set; }
private void btnLogin_Click(object sender, EventArgs e)
{
this.Close(); //Close Form1
/* Set the property to true while closing Form1.This propert will be checked
before running Form2 in Main method.*/
IsLoggedIN = true;
}
Then Update the Main() method as below.
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 frm1 = new Form1();
Application.Run(frm1);
/*Here the property IsLoggedIn is used to ensure that Form2 won't be shown when user closes Form1 using X button or a Cancel button inside Form1.*/
if (frm1.IsLoggedIn)
{
Application.Run(new Form2());
}
}
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.
private void btnLogin_Click(object sender, EventArgs e)
{
this.Hide(); //Hide Form1.
Form2 frm2 = new Form2();
frm2.Show(); // Launch Form2
}
Summary
In this post we have seen samples to close Form1 and open Form2 in C# and same code logic can be used in VB.NET. Hope these code snippets has helped you to rectify the issues during close one form and open another form in C# or VB.NET. Leave your comments in the comment section below.
Related Items :
Close one form and Open another form On Button click,
Open new Form but Closing current Form,
vb.net close form from another form,
How to close form1 and open form2 in VB.NET,
Application.run to close a form and open another form
Reader Interactions
Trackbacks
Стандартные способы:
- кликнуть в правом верхнем углу красную кнопку «крестик»
- комбинация клавиш Alt+F4
- кликнуть правой кнопкой мыши в верхнем левом углу, выбрать из контекстного меню «Закрыть»
Не стандартные способы:
- с помощью красной кнопки «крестик» с использованием окна сообщения
- через созданную кнопку
- через созданную кнопку с использованием окна сообщения
с помощью красной кнопки «крестик» с использованием окна сообщения
Пользователь пытается закрыть программу стандартным способом, кликает на верхнюю правую кнопку «крестик», нажимает комбинацию клавиш Alt+F4 или в левом верхнем углу вызывает контекстное меню формы. Но программа сразу не закрывается, а появляется окно сообщения, в котором нужно подтвердить решение закрытия.
Событие FormClosingEventArgs принимает параметр «е». Этот параметр имеет свойство Cancel. Если установить его в false, форма закроется, если в true — останется открытой.
Скрыть
Показать
Копировать
Form1.cs
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
using
System.Windows.Forms;
namespace
_0006 {
-
public
partial
class
Form1 : Form {
-
public
Form1() {
-
InitializeComponent();
-
}
-
private
void
Form1_FormClosing(
object
sender, FormClosingEventArgs e) {
-
DialogResult dialog = MessageBox.Show(
-
"Вы действительно хотите выйти из программы?"
,
-
"Завершение программы"
,
-
MessageBoxButtons.YesNo,
-
MessageBoxIcon.Warning
-
);
-
if
(dialog == DialogResult.Yes) {
-
e.Cancel =
false
;
-
}
-
else
{
-
e.Cancel =
true
;
-
}
-
}
-
}
}
через созданную кнопку
Метод Close() в родительской форме закрывает все приложение.
Метод Close() в дочерних формах закрывает только дочернюю форму.
Метод Application.Exit() закрывает приложение, если вызывается как из родительской формы, так и из дочерних форм.
Скрыть
Показать
Копировать
Form1.cs
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
using
System.Windows.Forms;
namespace
_0007 {
-
public
partial
class
Form1 : Form {
-
public
Form1() {
-
InitializeComponent();
-
}
-
private
void
button1_Click(
object
sender, EventArgs e) {
-
this
.Close();
-
}
-
}
}
через созданную кнопку с использованием окна сообщения
В этом примере мы добавим кнопку на форму, которая будет закрывать приложение. Но при нажатии на кнопку будет вызвано окно сообщений.
Скрыть
Показать
Копировать
Form1.cs
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
using
System.Windows.Forms;
namespace
_0008 {
-
public
partial
class
Form1 : Form {
-
public
Form1() {
-
InitializeComponent();
-
}
-
private
void
button1_Click(
object
sender, EventArgs e) {
-
DialogResult dialog = MessageBox.Show(
-
"Вы действительно хотите выйти из программы?"
,
-
"Завершение программы"
,
-
MessageBoxButtons.YesNo,
-
MessageBoxIcon.Warning
-
);
-
if
(dialog == DialogResult.Yes) {
-
this
.Close();
-
}
-
}
-
}
}
Распознавание голоса и речи на C#
UnmanagedCoder 05.05.2025
Интеграция голосового управления в приложения на C# стала намного доступнее благодаря развитию специализированных библиотек и API. При этом многие разработчики до сих пор считают голосовое управление. . .
Реализация своих итераторов в C++
NullReferenced 05.05.2025
Итераторы в C++ — это абстракция, которая связывает весь экосистему Стандартной Библиотеки Шаблонов (STL) в единое целое, позволяя алгоритмам работать с разнородными структурами данных без знания их. . .
Разработка собственного фреймворка для тестирования в C#
UnmanagedCoder 04.05.2025
C# довольно богат готовыми решениями – NUnit, xUnit, MSTest уже давно стали своеобразными динозаврами индустрии. Однако, как и любой динозавр, они не всегда могут протиснуться в узкие коридоры. . .
Распределенная трассировка в Java с помощью OpenTelemetry
Javaican 04.05.2025
Микросервисная архитектура стала краеугольным камнем современной разработки, но вместе с ней пришла и головная боль, знакомая многим — отслеживание прохождения запросов через лабиринт взаимосвязанных. . .
Шаблоны обнаружения сервисов в Kubernetes
Mr. Docker 04.05.2025
Современные Kubernetes-инфраструктуры сталкиваются с серьёзными вызовами. Развертывание в нескольких регионах и облаках одновременно, необходимость обеспечения низкой задержки для глобально. . .
Создаем SPA на C# и Blazor
stackOverflow 04.05.2025
Мир веб-разработки за последние десять лет претерпел коллосальные изменения. Переход от традиционных многостраничных сайтов к одностраничным приложениям (Single Page Applications, SPA) — это. . .
Реализация шаблонов проектирования GoF на C++
NullReferenced 04.05.2025
«Банда четырёх» (Gang of Four или GoF) — Эрих Гамма, Ричард Хелм, Ральф Джонсон и Джон Влиссидес — в 1994 году сформировали канон шаблонов, который выдержал проверку временем. И хотя C++ претерпел. . .
C# и сети: Сокеты, gRPC и SignalR
UnmanagedCoder 04.05.2025
Сетевые технологии не стоят на месте, а вместе с ними эволюционируют и инструменты разработки. В . NET появилось множество решений — от низкоуровневых сокетов, позволяющих управлять каждым байтом. . .
Создание микросервисов с Domain-Driven Design
ArchitectMsa 04.05.2025
Архитектура микросервисов за последние годы превратилась в мощный архитектурный подход, который позволяет разрабатывать гибкие, масштабируемые и устойчивые системы. А если добавить сюда ещё и. . .
Многопоточность в C++: Современные техники C++26
bytestream 04.05.2025
C++ долго жил по принципу «один поток — одна задача» — как старательный солдатик, выполняющий команды одну за другой. В то время, когда процессоры уже обзавелись несколькими ядрами, этот подход стал. . .