Можно ли отключить кнопку «закрыть» формы с помощью С#?

c#
Вопрос:Как отключить кнопку закрытия формы, как на изображении ниже? (изображение ниже показывает окно MessageBox) MessageBox выше было создано мной! Я хочу отключить кнопку закрытия обычной формы. Лучший ответ: Вы обрабатываете событие Закрытие (а не закрытое событие) формы. И затем вы используете e.CloseReason, чтобы решить, хотите ли вы его заблокировать (UserClose) или нет (TaskManager Close). Кроме

Вопрос:

Как отключить кнопку закрытия формы, как на изображении ниже? (изображение ниже показывает окно MessageBox)

enter image description here

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

Лучший ответ:

Вы обрабатываете событие Закрытие (а не закрытое событие) формы.

И затем вы используете e.CloseReason, чтобы решить, хотите ли вы его заблокировать (UserClose) или нет (TaskManager Close).

Кроме того, есть небольшой пример Отключение кнопки закрытия в формах на codeproject.

Ответ №1

Щелкните правой кнопкой мыши на соответствующем окне и выберите “Свойства” . В разделе “Свойства” нажмите “События”. Дважды щелкните событие FormClosing.

В Windows Form Designer будет создан следующий код:

private void myWindow_FormClosing(object sender, FormClosingEventArgs e) { }

Просто обновите код, чтобы он выглядел следующим образом (добавьте e.Cancel = true;):

private void myWindow_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = true; }

Вы закончили!

Альтернативно, если вы хотите отключить кнопки закрытия, максимизации и уменьшения окна:

Вы можете щелкнуть правой кнопкой мыши по рассматриваемому окну и нажать “Свойства” . В разделе Свойства установите для свойства ControlBox значение false.

Ответ №2

Если вы работаете с дочерним окном MDI и отключите кнопку закрытия во время создания окна, вы исключены (т.е. вы хотите отключить его в определенное время в течение жизни формы) ни одно из предложенных ранее решений не будет работать¹.

Вместо этого мы должны использовать следующий код:

[DllImport(«user32»)] public static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); [DllImport(«user32»)] public static extern bool EnableMenuItem(IntPtr hMenu, uint itemId, uint uEnable); public static void DisableCloseButton(this Form form) { // The 1 parameter means to gray out. 0xF060 is SC_CLOSE. EnableMenuItem(GetSystemMenu(form.Handle, false), 0xF060, 1); } public static void EnableCloseButton(this Form form) { // The zero parameter means to enable. 0xF060 is SC_CLOSE. EnableMenuItem(GetSystemMenu(form.Handle, false), 0xF060, 0); }

¹ Вы можете установить ControlBox = false, если вам не нужны какие-либо кнопки, но это не то, о чем спрашивает вопрос.

Ответ №3

Вы должны переопределить функцию CreateParams, полученную из System.Windows.Forms.Form

И измените стиль класса

myCp.ClassStyle = 0x200; Ответ №4 Closing += (s, eventArgs) => { DialogResult = DialogResult.None; //means that dialog would continue running };

Оцените статью
Добавить комментарий