Вопрос:
Как отключить кнопку закрытия формы, как на изображении ниже? (изображение ниже показывает окно MessageBox)
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 };