Читаем Язык программирования C#9 и платформа .NET5 полностью

private void Button_Click(object sender, RoutedEventArgs e)

{

  // Указал ли пользователь /godmode?

  if ((bool)Application.Current.Properties["GodMode"])

  {

    MessageBox.Show("Cheater!");  // Мошенник!

  }

}


Если теперь ввести аргумент командной строки /godmode на вкладке Debug (Отладка) в окне свойств проекта и запустить программу, то отобразится окно сообщения и программа завершится. Можно также запустить программу из командной строки с помощью показанной ниже команды (предварительно открыв окно командной строки и перейдя в каталог bin/debug):


WpfAppAllCode.exe /godmode


Отобразится окно сообщения и программа завершится.


На заметку! Вспомните, что аргументы командной строки можно указывать внутри Visual Studio. Нужно просто дважды щелкнуть на значке Properties (Свойства) в окне Solution Explorer, в открывшемся диалоговом окне перейти на вкладку Debug (Отладка) и ввести /godmode в поле Command line arguments (Аргументы командной строки).

Обработка закрытия объекта Window

Конечные пользователи могут завершать работу окна с помощью многочисленных встроенных приемов уровня системы (например, щелкнув на кнопке закрытия X внутри рамки окна) или вызвав метод Close в ответ на некоторое действие с интерактивным элементом (скажем, выбор пункта меню File Exit (Файл Выход)). Инфраструктура WPF предлагает два события, которые можно перехватывать для выяснения, действительно ли пользователь намерен закрыть окно и удалить его из памяти. Первое такое событие — Closing, которое работает в сочетании с делегатом CancelEventHandler.

Указанный делегат ожидает целевые методы, принимающие тип System.ComponentModel.CancelEventArgs во втором параметре. Класс CancelEventArgs предоставляет свойство Cancel, установка которого в true предотвращает фактическое закрытие окна (что удобно, когда пользователю должен быть задан вопрос о том, на самом ли деле он желает закрыть окно или сначала нужно сохранить результаты проделанной работы). Если пользователь действительно хочет закрыть окно, тогда свойство CancelEventArgs.Cancel можно установить в false (стандартное значение). В итоге сгенерируется событие Closed (которое работает с делегатом System.EventHandler), представляющее собой точку, где окно полностью и безвозвратно готово к закрытию.

Модифицируйте класс МаinWindow для обработки упомянутых двух событий, добавив в текущий код конструктора такие операторы:


public MainWindow

{

  InitializeComponent;

  this.Closed+=MainWindow_Closed;

  this.Closing += MainWindow_Closing;

}


Теперь реализуйте соответствующие обработчики событий:


private void MainWindow_Closing(object sender,

                                System.ComponentModel.CancelEventArgs e)

{

  // Выяснить, на самом ли деле пользователь хочет закрыть окно.

  string msg = "Do you want to close without saving?";

  MessageBoxResult result = MessageBox.Show(msg,

    "My App", MessageBoxButton.YesNo, MessageBoxImage.Warning);

  if (result == MessageBoxResult.No)

  {

   // Если пользователь не желает закрывать окно, тогда отменить закрытие.

    e.Cancel = true;

  }

}


private void MainWindow_Closed(object sender, EventArgs e)

{

  MessageBox.Show("See ya!");

}


Запустите программу и попробуйте закрыть окно, щелкнув либо на значке X в правом верхнем углу окна, либо на кнопке. Должно появиться диалоговое окно с запросом подтверждения. Щелчок на кнопке Yes (Да) приведет к отображению окна с прощальным сообщением, а щелчок на кнопке No (Нет) оставит окно в памяти.

Перехват событий мыши

Инфраструктура WPF предоставляет несколько событий, которые можно перехватывать, чтобы взаимодействовать с мышью. В частности, базовый класс UIElement определяет такие связанные с мышью события, как MouseMove, MouseUp, MouseDown, MouseEnter, MouseLeave и т.д.

Перейти на страницу:

Похожие книги

Программирование. Принципы и практика использования C++ Исправленное издание
Программирование. Принципы и практика использования C++ Исправленное издание

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов

Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Нил Форд , Билл де Ора , Майкл Хайгард

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT