C windows forms закрыть окно

You need the actual instance of the WindowSettings that’s open, not a new one.

Currently, you are creating a new instance of WindowSettings and calling Close on that. That doesn’t do anything because that new instance never has been shown.

Instead, when showing DialogSettingsCancel set the current instance of WindowSettings as the parent.

Something like this:

In WindowSettings:

private void showDialogSettings_Click(object sender, EventArgs e)
{
    var dialogSettingsCancel = new DialogSettingsCancel();
    dialogSettingsCancel.OwningWindowSettings = this;
    dialogSettingsCancel.Show();
}

In DialogSettingsCancel:

public WindowSettings OwningWindowSettings { get; set; }

private void button1_Click(object sender, EventArgs e)
{
    this.Close();
    if(OwningWindowSettings != null)
        OwningWindowSettings.Close();
}

This approach takes into account, that a DialogSettingsCancel could potentially be opened without a WindowsSettings as parent.

If the two are always connected, you should instead use a constructor parameter:

In WindowSettings:

private void showDialogSettings_Click(object sender, EventArgs e)
{
    var dialogSettingsCancel = new DialogSettingsCancel(this);
    dialogSettingsCancel.Show();
}

In DialogSettingsCancel:

WindowSettings _owningWindowSettings;

public DialogSettingsCancel(WindowSettings owningWindowSettings)
{
    if(owningWindowSettings == null)
        throw new ArgumentNullException("owningWindowSettings");

    _owningWindowSettings = owningWindowSettings;
}

private void button1_Click(object sender, EventArgs e)
{
    this.Close();
    _owningWindowSettings.Close();
}

  1. Use the Close() Method to Close Form in C#
  2. Set the DialogResult Property in Windows Forms to Close Form in C#
  3. Use the Application.Exit Method to Exit the Application in C#
  4. Use the Environment.Exit Method to Exit the Application in C#
  5. Use the Form.Hide() Method to Hide Form in C#
  6. Use the Form.Dispose() Method to Dispose Form in C#
  7. Conclusion

Close Form in C#

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.

Стандартные способы:

  • кликнуть в правом верхнем углу красную кнопку «крестик»
  • комбинация клавиш 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();
  •     
  •    }
  •   }
  •  }
  • }

RRS feed

  • Remove From My Forums
  • Question

  • Hi

    I am working in visual studio C# 2005.

    I have written a client socket program. After closing the client connection. I want to shutdown the form.

    In VB if you put down «end» the form closes and so does the program.

    But when i put down form.close();

    the ‘close’ does not come in popup menu at all.

    where am i going wrong

    regards

    skrcmr

Answers

  • I guess you could try 

    this.Close()  or  Application.Exit()

    this.Close() should be what you wanted.

All replies

  • I guess you could try 

    this.Close()  or  Application.Exit()

    this.Close() should be what you wanted.

  • hi, how are you guys ? every thing is fine ?

    I am working on Sockets on both Server and clients sides,

    so, I think the best thing to do for this situation is to do the following:

    1 — It would best to make a confirmation message box for closing.

    2 — shutdown all the Sockets the you initialized before closing the application.

    3 — Finally, just close the application.

    notice that step 2 is the most important in this process, since that if you didn’t shutdown the Socket it most of the time couse the application to not response.

    hope this helps.

C# Закрытие окна

В программировании существует множество ситуаций, когда необходимо закрыть окно в приложении. Может потребоваться закрытие окна при нажатии определенной кнопки, при выполнении определенного действия или в результате какого-либо внешнего события. В этой статье мы рассмотрим различные способы закрытия окна в языке программирования C#.

1. Метод Close()

Предположим, что у вас есть форма Windows Forms, которую вы хотите закрыть. Для закрытия окна можно использовать метод Close(). Для этого сначала необходимо получить экземпляр текущего окна, а затем вызвать метод Close() на этом экземпляре.

Пример:

this.Close();

Метод Close() закрывает текущее окно и освобождает все его ресурсы. При вызове метода Close() также вызывается событие FormClosing, которое можно использовать для выполнения дополнительных действий перед закрытием окна.

2. Значение DialogResult

Если вы используете диалоговое окно с кнопкой «ОК» и «Отмена», может потребоваться закрыть окно, если пользователь нажал кнопку «ОК». Для этого можно использовать свойство DialogResult.

Пример:

private void buttonOK_Click(object sender, EventArgs e)
{
    this.DialogResult = DialogResult.OK;
    this.Close();
}

private void buttonCancel_Click(object sender, EventArgs e)
{
    this.DialogResult = DialogResult.Cancel;
    this.Close();
}

В этом примере при нажатии кнопки «ОК» значение DialogResult устанавливается на DialogResult.OK, а затем вызывается метод Close(). При нажатии кнопки «Отмена» значение DialogResult устанавливается на DialogResult.Cancel, а затем также вызывается метод Close(). В основном коде можно проверять значение DialogResult после вызова метода ShowDialog() для определения результата диалогового окна.

3. Событие FormClosing

Как упоминалось ранее, событие FormClosing вызывается перед закрытием окна. Можно использовать это событие для выполнения дополнительных действий перед закрытием окна или для отмены закрытия.

Пример:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if (MessageBox.Show("Вы уверены, что хотите закрыть окно?", "Подтверждение", MessageBoxButtons.YesNo) == DialogResult.No)
    {
        e.Cancel = true;
    }
}

В этом примере при закрытии окна пользователю выводится диалоговое окно с вопросом о подтверждении закрытия. Если пользователь выбирает «Нет», свойство Cancel устанавливается на true, что отменяет закрытие окна. В противном случае, если пользователь выбирает «Да» или закрывает диалоговое окно, окно закрывается.

4. Метод Dispose()

Метод Dispose() очищает все ресурсы, связанные с окном, и освобождает память. В большинстве случаев вызывать метод Dispose() явно не требуется, так как он будет вызван автоматически при закрытии окна.

Однако если у вас есть особые требования к очистке ресурсов, можно переопределить метод Dispose() в вашем классе окна и выполнить нужные действия перед закрытием окна.

Пример:

protected override void Dispose(bool disposing)
{
    if (disposing && (components != null))
    {
        components.Dispose();
    }
    base.Dispose(disposing);
}

В этом примере метод Dispose() вызывает метод Dispose() для всех компонентов окна, которые были созданы с помощью дизайнера Windows Forms.

В заключение, закрытие окна в C# можно выполнить с использованием метода Close(), значения DialogResult, события FormClosing или метода Dispose(). Выбор способа закрытия будет зависеть от ваших конкретных требований и логики приложения.

Удачного программирования!

  • C windows forms диалоговое окно
  • C windows system32 backgroundtaskhost exe
  • C windows system32 compmgmt msc что это
  • C windows softwaredistribution download как очистить
  • C windows forms programming in c