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();
}
I have an exit button on a winform that I want to use to close the program. I have added the button name to the FormClosed property found in the events section of the winforms properties. I thought that’s all I had to do but when I click the button it does not close. I looked at the code and while a handler is created, there is no code inside of it. I don’t know if that is correct or not. Here is the code that was created in the Form.cs file:
private void btnExitProgram_Click(object sender, EventArgs e)
{
}
What else do I have to do?
neontapir
4,6803 gold badges37 silver badges52 bronze badges
asked Mar 6, 2012 at 15:29
2
this.Close();
Closes the form programmatically.
answered Mar 6, 2012 at 15:31
1
Remove the method, I suspect you might also need to remove it from your Form.Designer
.
Otherwise: Application.Exit();
Should work.
That’s why the designer is bad for you.
answered Mar 6, 2012 at 15:34
1
The FormClosed Event is an Event that fires when the form closes. It is not used to actually close the form. You’ll need to remove anything you’ve added there.
All you should have to do is add the following line to your button’s event handler:
this.Close();
answered Mar 6, 2012 at 15:32
Justin NiessnerJustin Niessner
240k40 gold badges405 silver badges535 bronze badges
1
We can close every window using Application.Exit();
Using this method we can close hidden windows also.
private void btnExitProgram_Click(object sender, EventArgs e)
{
Application.Exit();
}
answered Jun 1, 2017 at 9:20
Put this little code in the event of the button:
this.Close();
answered Mar 6, 2012 at 15:32
AbbasAbbas
14k6 gold badges41 silver badges71 bronze badges
0
Try this:
private void btnExitProgram_Click(object sender, EventArgs e) {
this.Close();
}
answered Mar 6, 2012 at 15:32
juergen djuergen d
199k36 gold badges286 silver badges350 bronze badges
0
Used Following Code
System.Windows.Forms.Application.Exit( )
answered Dec 9, 2020 at 18:44
In Visual Studio 2015, added this to a menu for File -> Exit and in that handler put:
this.Close();
but the IDE said ‘this’ was not necessary. Used the IDE suggestion with just Close();
and it worked.
answered Jan 13, 2016 at 17:53
Brad RogersBrad Rogers
892 silver badges12 bronze badges
If you only want to Close the form than you can use this.Close();
else if you want the whole application to be closed use Application.Exit();
answered Oct 23, 2016 at 16:48
You can also do like this:
private void button2_Click(object sender, EventArgs e)
{
System.Windows.Forms.Application.ExitThread();
}
answered Oct 4, 2019 at 6:27
I have an exit button on a winform that I want to use to close the program. I have added the button name to the FormClosed property found in the events section of the winforms properties. I thought that’s all I had to do but when I click the button it does not close. I looked at the code and while a handler is created, there is no code inside of it. I don’t know if that is correct or not. Here is the code that was created in the Form.cs file:
private void btnExitProgram_Click(object sender, EventArgs e)
{
}
What else do I have to do?
neontapir
4,6803 gold badges37 silver badges52 bronze badges
asked Mar 6, 2012 at 15:29
2
this.Close();
Closes the form programmatically.
answered Mar 6, 2012 at 15:31
1
Remove the method, I suspect you might also need to remove it from your Form.Designer
.
Otherwise: Application.Exit();
Should work.
That’s why the designer is bad for you.
answered Mar 6, 2012 at 15:34
1
The FormClosed Event is an Event that fires when the form closes. It is not used to actually close the form. You’ll need to remove anything you’ve added there.
All you should have to do is add the following line to your button’s event handler:
this.Close();
answered Mar 6, 2012 at 15:32
Justin NiessnerJustin Niessner
240k40 gold badges405 silver badges535 bronze badges
1
We can close every window using Application.Exit();
Using this method we can close hidden windows also.
private void btnExitProgram_Click(object sender, EventArgs e)
{
Application.Exit();
}
answered Jun 1, 2017 at 9:20
Put this little code in the event of the button:
this.Close();
answered Mar 6, 2012 at 15:32
AbbasAbbas
14k6 gold badges41 silver badges71 bronze badges
0
Try this:
private void btnExitProgram_Click(object sender, EventArgs e) {
this.Close();
}
answered Mar 6, 2012 at 15:32
juergen djuergen d
199k36 gold badges286 silver badges350 bronze badges
0
Used Following Code
System.Windows.Forms.Application.Exit( )
answered Dec 9, 2020 at 18:44
In Visual Studio 2015, added this to a menu for File -> Exit and in that handler put:
this.Close();
but the IDE said ‘this’ was not necessary. Used the IDE suggestion with just Close();
and it worked.
answered Jan 13, 2016 at 17:53
Brad RogersBrad Rogers
892 silver badges12 bronze badges
If you only want to Close the form than you can use this.Close();
else if you want the whole application to be closed use Application.Exit();
answered Oct 23, 2016 at 16:48
You can also do like this:
private void button2_Click(object sender, EventArgs e)
{
System.Windows.Forms.Application.ExitThread();
}
answered Oct 4, 2019 at 6:27
Стандартные способы:
- кликнуть в правом верхнем углу красную кнопку «крестик»
- комбинация клавиш 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();
-
}
-
}
-
}
}
- HowTo
- C# Howtos
- Close Form in C#
- Close Form With the
Application.Exit()
Function inC#
- Close Form With the
Form.Close()
Function inC#
This tutorial will introduce the methods to close a form in C#.
Close Form With the Application.Exit()
Function in C#
The Application.Exit()
function is used to close the entire application in C#. The Application.Exit()
function informs all message loops to terminate execution and closes the application after all the message loops have terminated. We can also use the Application.Exit()
function to close a form in a Windows Form application if our application only consists of one form. See the following example.
using System;
using System.Windows.Forms;
namespace close_form
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button3_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}
In the above code, we closed the form in our Windows Form application that only consists of one form with the Application.Exit()
function in C#. The only drawback with this approach is that the Application.Exit()
function exits the whole application. So, if the application contains more than one form, all the forms will be closed.
Close Form With the Form.Close()
Function in C#
The Form.Close()
function is used to close a Form in a Windows Form application in C#. We can use the Form.Close()
function inside the button click event to close the specified form by clicking a button. See the following example.
using System;
using System.Windows.Forms;
namespace close_form
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
In the above code, we closed the form in our Windows Form application that only consists of one form with the Form.Close()
function in C#. Unlike the previous method, this method only closes a single Form in our application. This method can be used to close a single form in an application that consists of multiple forms.
Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.
Related Article — Csharp GUI
Алена5 2 / 2 / 0 Регистрация: 17.05.2010 Сообщений: 68 |
||||||||||||
1 |
||||||||||||
Закрыть окно06.10.2011, 16:36. Показов 97479. Ответов 12 Метки нет (Все метки)
Делаю программку с 3-мя окнами. Окна открываются поочередно кнопками(сначала первое окно из него с помощью кнопки вызываться второе а уже из второго третье). При этом после того как было вызвано второе окно первое должно закрываться.
Но при этом автоматически закрывалась вся программка полностью. Делала закрытие из другого окна
Второе окно открывалось и сразу же закрывалось все полностью. После этого написала
Все окна появляються нормально но после того как я их закрываю и перезапускаю прогу возникает ошибка типа Программка уже запущена закройте ее Приходиться каждый раз лезть в диспетчер задач и завершать все процессы «насильно». Задолбалась Подскажите как это можно решить плиз.
__________________
0 |
137 / 137 / 42 Регистрация: 02.11.2010 Сообщений: 316 |
|
06.10.2011, 17:19 |
2 |
А что именно требуется то? Если все окна закрываешь, то желательно и прогу завершать, иначе она повиснет в памяти. А как окно назад возвращать?
0 |
sk007 Life Builder 532 / 496 / 374 Регистрация: 12.01.2011 Сообщений: 1,752 |
||||||||||||||||
06.10.2011, 17:37 |
3 |
|||||||||||||||
попробуй вместо
писать
потом можно будет возвращать окно
, Чтобы завершить программу используй
.
3 |
Заблокирован |
|
06.10.2011, 17:46 |
4 |
Приходиться каждый раз лезть в диспетчер задач и завершать все процессы «насильно». В студии на панели инструментов есть синий квадратик «остановить отладку».
0 |
47 / 47 / 6 Регистрация: 09.11.2010 Сообщений: 308 |
|
06.10.2011, 17:57 |
5 |
дело в том, что формы 1 является основной и потому при её закрытии все остальные формы тоже закрываются
Код C# вы просто делаете основное окно невидимым, но не завершаете его работу
0 |
16749 / 12500 / 3286 Регистрация: 17.09.2011 Сообщений: 20,734 |
|
06.10.2011, 22:31 |
6 |
Не рекомендую использовать Application.Exit() — в этом случае приложение «убивается» и не вызываются события типа FormClosing.
0 |
47 / 47 / 6 Регистрация: 09.11.2010 Сообщений: 308 |
|
06.10.2011, 23:54 |
7 |
kolorotur, я не имею ввиду закрывать форму с помощью Application.Exit(). я говорю из приложения выходить с помощью данного метода
0 |
16749 / 12500 / 3286 Регистрация: 17.09.2011 Сообщений: 20,734 |
|
07.10.2011, 00:17 |
8 |
M__A__K, я вас понял, именно этого и не рекомендуется делать, особенно если во время выхода из приложения нужно хотя бы отследить что послужило закрытием (пользователь закрыл, убили прогу через диспетчер, комп ребутнулся — мало ли).
0 |
47 / 47 / 6 Регистрация: 09.11.2010 Сообщений: 308 |
|
07.10.2011, 18:35 |
9 |
kolorotur, а как тогда закрывать приложение?
0 |
16749 / 12500 / 3286 Регистрация: 17.09.2011 Сообщений: 20,734 |
|
07.10.2011, 18:56 |
10 |
M__A__K, я наверное коряво выразился.
0 |
47 / 47 / 6 Регистрация: 09.11.2010 Сообщений: 308 |
|
07.10.2011, 19:31 |
11 |
Однако, если форма подписана на обработку событий FormClosing и/или FormClosed, то при использовании Application.Exit эти события не будут запущены, Метод Exit вызывает следующие события и выполняет сопоставленные условные действия: Событие FormClosing вызывается для каждое формы, представленной свойством OpenForms. Это событие не может быть отменено посредством задания для свойства Cancel его параметра FormClosingEventArgs значения true. Если один или более обработчиков отменяют событие, метод Exit возвращается, не выполняя дальнейших действий. В противном случае событие FormClosed происходит при каждом открытии формы, после чего все выполняющиеся циклы обработки сообщений, а также формы закрываются. Примечание Статья MSDN Добавлено через 2 минуты
1 |
16749 / 12500 / 3286 Регистрация: 17.09.2011 Сообщений: 20,734 |
|
07.10.2011, 22:49 |
12 |
M__A__K, фу ты елки-палки, это я так отстал от жизни
0 |
21 / 14 / 5 Регистрация: 21.02.2013 Сообщений: 661 |
|
27.08.2016, 08:21 |
13 |
kolorotur, можете подробнее описать процесс создания обеих окон в родительской, как Вы упомянули… И что вообще такое этот DialogResult
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
27.08.2016, 08:21 |
Помогаю со студенческими работами здесь Закрыть дочернее окно при открытии копии этого окна имея две… Закрыть 2 форму при этом не закрыть весь проект Форма (окно) произвольного вида, Переделываем окно — теория и практика Закрыть дочернее окно и открыть в единственном экземпляре Главное окно Закрыть окно, из которого создано новое окно Window1 window = new Window1();… Как закрыть или скрыть основное окно и открыть дочернее, и как потом закрыть дочернее окно и открыть основное Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 13 |
Имеется многооконное приложение. При запуске вызывается что-то на-подобии «Окна входа», где пользователь вводит, к примеру, логин и пароль. При наличии в базе пары введенный логин-пароль «Окно входа» закрывается и открывается «Основное
окно», из которого последовательно вызываются другие окна, а оно закрывается. Понятно, что с привязкой формы к приложению это все организовать не получится(точнее сделать то можно, меняя у форм свойство Visible, но это будет «жрать неимоверное количество
памяти», а это не очень хорошо), поэтому в файле «Program.cs» пишу следующий код:
[STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Form1 form1 = new Form1(); form1.Show(); Application.Run(); //запустить независимое от Form1 приложение }
Затем в нужном месте просто пишу что-то на-подобии:
Form2 form2 = new Form2(); //создать экземпляр типа Form2 form2.Show(); //отобразить его this.Close(); //закрыть текущую форму
При такой работе практически все работает как надо, но т.к. приложение не зависит от Form, то если пользователь сам закроет окно(не нажав на кнопку, выделенную мной для закрытия), то процесс приложения будет «висеть» в памяти, а это «не есть
гуд».
Пытался идентифицировать каким именно способом закрылась форма: с помощью кода
или по нажатию пользователя на «крестик». Но оба этих события передают в метод Form_Closing один и тот же аргумент FormClosingEventArgs, который в поле CloseReason содержит значение UserClosing, т.е. таким макаром не отследить. Подумал: «может
создать некоторую переменную типа Boolean, значение в которой изменять по нажатии на мою клавишу для закрытия и в зависимости от её значения завершать процесс приложения или нет», но эта переменная должна быть глобальной, а использование таких переменных
также не очень хорошо. В итоге: я встал в тупик…
Может кто-то подскажет каким образом можно корректно реализовать многооконное приложение, чтобы не возникало вышеописанных проблем.
Чтобы
скрыть форму вызовите
метод Hide.
В
следующем примере кода показан способ
скрытия формы frm1.
glob.frm1.Hide();
Внимание.
При скрытии начальной формы вы не сможете
без дополнительных команд закрыть
приложение. Поэтому одновременоо с
методом Hide для начальной формы
прописывается команда ее открытия,
привязанная к некоторому событию.
Пример:
Можно передать функцию закрытия
приложения другой форме. Для этого в
событии FormClosed для этой формы необходимо
прописать метод Show для начальной фомы.
private
void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
glob.frm1.Show();
}
Чтобы
закрыть форму вызовите
метод Close.
В
следующем примере кода показан способ
закрытия формы frm1.
glob.frm1.Close();
Примечание1.
При закрытии начальной формы будет
закрыто приложение.
Примечание2.
При закрытии формы происходит ликвидация
файловой переменной. Если закрытаяформа
не является начальной и предполагается
форму открывать неоднократно, то при
открытии формы должны быть прописаны
два метода: Show
и new
Form,
например:
glob.frm2
= new Form2();
glob.frm2.Show();
-
Работа с элементами управления Windows Forms
Элемент
управления
— это компонент на форме, использующийся
для отображения сведений или ввода
пользовательских данных. В
ходе разработки и изменения пользовательского
интерфейса приложений Windows Forms требуется
добавлять, выравнивать и размещать
элементы управления. Каждый тип элемента
управления имеет собственный набор
свойств, методов и событий, соответствующих
определенному назначению. С элементами
управления можно работать в конструкторе
или добавлять их динамически во время
выполнения с помощью кода.
Существуют
разнообразные элементы управления,
которые можно разместить в Windows Forms в
зависимости от требований конкретного
приложения.
-
Добавление элементов управления в формы Windows Forms
Большинство
форм разрабатываются путем добавления
элементов управления на поверхность
формы с целью создания пользовательского
интерфейса.
Чтобы
нарисовать элемент управления в форме,
выполните следующие действия.
-
Откройте
форму. -
В
панели
элементов
щелкните элемент управления, который
требуется добавить в форму. -
Щелкните
место в форме, где должен располагаться
левый верхний угол элемента управления,
а затем перетащите указатель мыши на
место, в котором должен располагаться
правый нижний угол элемента управления.
Элемент
управления добавляется на форму в
указанное место с указанными размерами.
Примечание.
Для каждого
элемента управления существует размер,
определенный по умолчанию. На форму
можно добавить элемент управления,
который будет иметь размер по умолчанию.
Для этого требуется перетащить элемент
управления из панели
элементов на
форму.
Чтобы перетащить
элемент управления в форму, выполните
следующие действия.
-
Откройте
форму. -
В
панели элементов
щелкните требуемый элемент управления
и перетащите его в форму.
Элемент
добавляется в форму в указанное место
с размером по умолчанию.
Примечание.
Чтобы
добавить элемент управления с размером
по умолчанию в верхний левый угол формы,
щелкните его два раза в панели
элементов.
Можно
также добавлять элементы управления
на форму динамически во время выполнения.
В приведенном ниже примере элемент
управления TextBox
(текстовое поле) будет добавлен на форму
после щелчка элемента управления Button
(кнопка).
Примечание.
Для
следующей процедуры требуется форма с
уже расположенным в ней элементом
управления Кнопка
Button1
.
Чтобы
добавить элемент управления в форму с
помощью программных средств, необходимо
в метод, который обрабатывает событие
(например, Click
для кнопки) в результате которого должен
быть добавлен элемент управления,
добавить код, идентичный приведенному
ниже. В коде прописаны команды: добавление
ссылки на переменную элемента управления,
задание расположения (свойство Location)
элемента управления и добавления самого
элемента управления.
private
void button1_Click(object sender, System.EventArgs e)
{
TextBox myText = new
TextBox();
myText.Location
= new Point(25,25);
this.Controls.Add (myText);
}
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #