Чтение онлайн

на главную - закладки

Жанры

Язык программирования C#9 и платформа .NET5
Шрифт:

Указанный делегат ожидает целевые методы, принимающие тип

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
и т.д.

В качестве примера обработайте событие

MouseMove
. Это событие работает в сочетании с делегатом
System.Windows.Input.MouseEventHandler
, который ожидает, что его целевой метод будет принимать во втором параметре объект типа
System.Windows.Input.MouseEventArgs
. С применением класса
MouseEventArgs
можно извлекать позицию (х, у)
курсора мыши и другие важные детали. Взгляните на следующее неполное определение:

public class MouseEventArgs : InputEventArgs

{

...

public Point GetPosition(IInputElement relativeTo);

public MouseButtonState LeftButton { get; }

public MouseButtonState MiddleButton { get; }

public MouseDevice MouseDevice { get; }

public MouseButtonState RightButton { get; }

public StylusDevice StylusDevice { get; }

public MouseButtonState XButton1 { get; }

public MouseButtonState XButton2 { get; }

}

На заметку! Свойства

XButton1
и
XButton2
позволяют взаимодействовать с "расширенными кнопками мыши" (вроде кнопок "вперед" и "назад", которые имеются в некоторых устройствах). Они часто используются для взаимодействия с хронологией навигации браузера, чтобы перемещаться между посещенными страницами.

Метод

GetPosition
позволяет получать значение (х, у) относительно какого-то элемента пользовательского интерфейса в окне. Если интересует позиция относительно активного окна, то нужно просто передать
this
. Обеспечьте обработку события
MouseMove
в конструкторе класса
МаinWindow
:

public MainWindow(string windowTitle, int height, int width)

{

...

this.MouseMove += MainWindow_MouseMove;

}

Ниже приведен обработчик события

MouseMove
, который отобразит местоположение курсора мыши в области заголовка окна (обратите внимание, что возвращенный тип
Point
транслируется в строковое значение посредством вызова
ToString
):

private void MainWindow_MouseMove(object sender,

System.Windows.Input.MouseEventArgs e)

{

// Отобразить в заголовке окна текущую позицию (х, у) курсора мыши.

this.Title = e.GetPosition(this).ToString;

}

Перехват событий клавиатуры

Обработка клавиатурного ввода для окна, на котором находится фокус, тоже очень проста. В классе

UIElement
определено несколько событий, которые можно перехватывать для отслеживания нажатий клавиш клавиатуры на активном элементе (например,
KeyUp
и
KeyDown
). События
KeyUp
и
KeyDown
работают с делегатом
System.Windows.Input.KeyEventHandler
, который ожидает во втором параметре тип
KeyEventArgs
, определяющий набор важных открытых свойств:

Поделиться:
Популярные книги

Дайте поспать!

Матисов Павел
1. Вечный Сон
Фантастика:
юмористическое фэнтези
постапокалипсис
рпг
5.00
рейтинг книги
Дайте поспать!

Инкарнатор

Прокофьев Роман Юрьевич
1. Стеллар
Фантастика:
боевая фантастика
рпг
7.30
рейтинг книги
Инкарнатор

Холодный ветер перемен

Иванов Дмитрий
7. Девяностые
Фантастика:
попаданцы
альтернативная история
6.80
рейтинг книги
Холодный ветер перемен

Брак по-драконьи

Ардова Алиса
Фантастика:
фэнтези
8.60
рейтинг книги
Брак по-драконьи

Возвышение Меркурия

Кронос Александр
1. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия

Черный Маг Императора 6

Герда Александр
6. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
7.00
рейтинг книги
Черный Маг Императора 6

Авиатор: назад в СССР 14

Дорин Михаил
14. Покоряя небо
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Авиатор: назад в СССР 14

Изгой. Пенталогия

Михайлов Дем Алексеевич
Изгой
Фантастика:
фэнтези
9.01
рейтинг книги
Изгой. Пенталогия

Возвышение Меркурия. Книга 14

Кронос Александр
14. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 14

Сама себе хозяйка

Красовская Марианна
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Сама себе хозяйка

Хуррит

Рави Ивар
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Хуррит

Титан империи 3

Артемов Александр Александрович
3. Титан Империи
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Титан империи 3

Два лика Ирэн

Ром Полина
Любовные романы:
любовно-фантастические романы
6.08
рейтинг книги
Два лика Ирэн

Неожиданный наследник

Яманов Александр
1. Царь Иоанн Кровавый
Приключения:
исторические приключения
5.00
рейтинг книги
Неожиданный наследник