В некоторых случаях мы хотели бы заблокировать действие кнопки закрытия в строке заголовка. Проблема в том, что это приложения MDI, и кажется, что нам нужно будет добавить код в каждой форме, чтобы отменить операцию в обработчике событий Closing
. Кажется, что формы ребенка являются первыми, кто получил это событие. Невозможно добавить код в одном месте, чтобы отменить операцию закрытия. Будет приветствоваться информация о том, как распространенное событие распространяется на дочернюю форму. Есть ли простой способ сделать то, что мы хотим сделать?Как отрегулировать кнопку закрытия (большой X) у источника?
ответ
Windows предоставляет способ сделать это, вы можете возиться с системным меню. Обеспечивает хорошую обратную связь, кнопка закрытия на самом деле выглядит отключенной. Вы можете отключить команду SC_CLOSE в системном меню. Лучший продемонстрировали с формой образца, начать сбросив кнопку на нем:
using System.Runtime.InteropServices;
...
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
button1.Click += new EventHandler(button1_Click);
}
private bool mCloseEnabled = true;
public bool CloseEnabled {
get { return mCloseEnabled; }
set {
if (value == mCloseEnabled) return;
mCloseEnabled = value;
setSystemMenu();
}
}
protected override void OnHandleCreated(EventArgs e) {
base.OnHandleCreated(e);
setSystemMenu();
}
private void setSystemMenu() {
IntPtr menu = GetSystemMenu(this.Handle, false);
EnableMenuItem(menu, SC_CLOSE, mCloseEnabled ? 0 : 1);
}
private const int SC_CLOSE = 0xf060;
[DllImport("user32.dll")]
private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool revert);
[DllImport("user32.dll")]
private static extern int EnableMenuItem(IntPtr hMenu, int IDEnableItem, int wEnable);
private void button1_Click(object sender, EventArgs e) {
CloseEnabled = !CloseEnabled;
}
}
Это решение, которое я наконец использовал. Он отлично работает. Благодарю. –
Майкл уже написал ответ в комментариях (просто добавить его здесь к ответам):
Создание единого BaseFormsClass, где вы переопределять поведение, а затем подкласс классы от новых BaseFormsClass.
Я просто ответил Майклу. –
Вы можете попытаться перехватить сообщения окна WM_CLOSE. Но если вы буквально не имеете тысячи существующих форм, я думаю, что подход базового класса будет самым простым и быстрым. – Foxfire
- 1. Как поменять кнопку закрытия [x} на excel
- 2. как снова включить кнопку закрытия (X)
- 3. Как отключить кнопку закрытия?
- 4. Inno Setup Отключить кнопку закрытия (X)
- 5. startFromScratch удаляет кнопку закрытия (x) рабочей книги
- 6. Скрыть кнопку закрытия «X» в FancyBox
- 7. Как отключить (или скрыть) кнопку закрытия (x) на JFrame?
- 8. Просмотр источника закрытия PHP
- 9. primefaces модальный диалог: Как отключить кнопку закрытия «X»
- 10. Как перенести кнопку закрытия (x) в jQuery Tools Overlay влево?
- 11. как показать кнопку закрытия «x» для мягкой клавиатуры в LibGdx
- 12. Как закодировать кнопку закрытия «X» для элемента wordpress
- 13. Как добавить кнопку закрытия (X) к этому наложению?
- 14. Как отрегулировать кнопку выключения питания на ноутбуке
- 15. Как отрегулировать кнопку отмены в JOptionPane
- 16. C# - как создать кнопку закрытия
- 17. Как отрегулировать область div после закрытия другого div
- 18. Как отрегулировать x ярлыков в R boxplot
- 19. Как правильно установить кнопку закрытия
- 20. Как создать собственную кнопку закрытия?
- 21. Как отключить кнопку закрытия Excel?
- 22. Как отключить кнопку закрытия браузера
- 23. Как отключить кнопку закрытия WPF?
- 24. Как скрыть кнопку закрытия формы?
- 25. Отключить кнопку этапа X
- 26. Добавить кнопку закрытия (красный x) в .NET ToolTip
- 27. Как скрыть/отключить google.maps.places. Закрыть кнопку закрытия?
- 28. Переопределить стандартную кнопку закрытия (X) в форме Windows
- 29. Обнаруживать кнопку закрытия UILocalNotification?
- 30. Отключить кнопку закрытия
Вы можете подклассы формы, написать код для закрытия в ней, а затем использовать, что вместо формы для ваших детей. –
@ Майкл. Трудность состоит в том, что это устаревшее приложение, и уже существует множество Форм. Изменение унаследованного класса не слишком сложно. Проблема в том, что каждый из этих классов имеет обработчики на 'Closing'event. Я мог бы связать их с другим пользовательским событием, вызванным из унаследованного класса. Я все еще надеюсь на лучшее решение, но это лучшее, что я получил до сих пор. –