MessageBoxIcon::Exclamation, // Пиктограмма "Предупреждение"
MessageBoxDefaultButton::Button1); // Кнопка по умолчанию: Yes
if (result == System::Windows::Forms::DialogResult::Yes)
// Если была нажата кнопка Yes...
//... Выполнение действий по сохранению файла
Else
//... Выполнение других действий
...
Пример 4.8. Использование окна сообщения MessageBox для предоставления пользователю возможности запретить закрытие формы. В этом примере необходимо, чтобы метод вызывался по событию FormClosing формы.
private:
void Form1_FormClosing(Object^ sender, FormClosingEventArgs^ e) {
// Если никакая кнопка не была нажата...
If ((MessageBox::Show(
"Вы уверенны, что хотите закрыть форму?",
"Закрытие формы", MessageBoxButtons::YesNo,
MessageBoxIcon::Question) == DialogResult::No))
e->Cancel = true; // Отмена закрытия формы.
}
Пример 4.9. Следующий пример кода показывает, как отобразить окно сообщения MessageBox с параметрами, поддерживаемыми методом Show. После того как проверка подтвердит, что строковая переменная ServerName пуста, отображается окно MessageBox со знаком вопроса, предлагающее пользователю возможность отмены данной операции. Для выравнивания текста по правому краю диалогового окна в примере используется элемент RightAlign перечисления MessageBoxOptions. Если метод Show возвращает значение Yes, то форма, в которой отображается объект MessageBox, закрывается.
private:
void validateUserEntry2() {
// Проверка наличия текста в поле ServerName.
if (ServerName->Text->Length == 0) {
// Объявление и инициализация переменных, передаваемых
// в окно сообщения (в метод MessageBox::Show).
String^ caption = "Не указано имя сервера";
String^ message =
"Вы не ввели имя сервера. Отменить эту операцию?";
MessageBoxButtons buttons = MessageBoxButtons::YesNo;
System::Windows::Forms::DialogResult result;
// Вывод сообщения.
result = MessageBox::Show(this, message, caption, buttons,
MessageBoxIcon::Question,
MessageBoxDefaultButton::Button1,
MessageBoxOptions::RightAlign);
if (result ==::DialogResult::Yes)
this->Close(); // Закрытие родительской формы.
}
}
Обработка событий нажатия клавиш для элементов управления
(https://msdn.microsoft.com/ru-ru/library/system.windows.forms.control.keypress(v=vs.110).aspx)
(https://technet.microsoft.com/ru-ru/library/system.windows.forms.control.keypress(v=vs.100).aspx)
При нажатии некоторой клавиши на клавиатуре (в случае, когда фокус находится на элементе управления) происходят три тесно связанных между собой события в следующем порядке:
1. KeyDown – происходит при нажатии клавиши (ее движении вниз).
2. KeyPress – происходит при нажатии символьной клавиши, пробела или клавиши BackSpace (нажатии и отпускании клавиши).
3. KeyUp – происходит при отпускании клавиши (ее движении вверх).
Классы KeyPressEventArgs и KeyEventArgs
Таблица 4.12. Свойства класса System::Windows::Forms::KeyPressEventArgs
(https://msdn.microsoft.com/ru-ru/library/system.windows.forms.keypresseventargs(v=vs.110).aspx)
Свойства | Описание |
Handled | Возвращает или задает значение, показывающее, было ли обработано событие KeyPress. Задание свойству значения true запрещает обработку события KeyPress (отменяет событие). |
KeyChar | Возвращает или задает символ, соответствующий нажатой клавише (во время выполнения). |
Таблица 4.13. Свойства класса System::Windows::Forms::KeyEventArgs
(https://msdn.microsoft.com/ru-ru/library/system.windows.forms.keyeventargs(v=vs.110).aspx)
Свойства | Описание |
Alt | Получает значение, показывающее, была ли нажата клавиша ALT. |
Control | Получает значение, показывающее, была ли нажата клавиша CTRL. |
Handled | Возвращает или задает значение, показывающее, было ли обработано событие. Задание свойству значения true запрещает обработку события KeyPress (отменяет событие). |
KeyCode | Получает код клавиатуры для событийKeyDown или KeyUp. |
KeyData | Возвращает данные клавиши для событийKeyDown или KeyUp. |
KeyValue | Получает значение клавиатуры для событий KeyDown или KeyUp. |
Modifiers | Получает флаги модификаторов для событий KeyDown или KeyUp. Флаги указывают, какая комбинация клавиш CTRL, SHIFT и ALT была нажата. |
Shift | Получает значение, показывающее, была ли нажата клавиша SHIFT. |
SuppressKeyPress | Возвращает или задает значение, указывающее, следует ли передавать событие нажатия клавиши базовому элементу управления. |
Перечисление Keys
(https://msdn.microsoft.com/ru-ru/library/system.windows.forms.keys(v=vs.110).aspx)
Таблица 4.14. Элементы перечисления System::Windows::Forms::Keys
Имя элемента | Описание |
Алфавитно-цифровые клавиши | |
A... Z | Клавиши "A"... "Z" |
D0... D9 | Клавиши "0"... "9" |
F1... F24 | Клавиши "F1"... "F24" |
Space | Клавиша "Пробел". |
Клавиши цифровой клавиатуры | |
NumLock | Клавиша "Num Lock" (фиксация цифрового регистра). |
NumPad0... NumPad9 | Клавиши "0"... "9" на цифровой клавиатуре. |
Decimal | Клавиша десятичного разделителя. |
Add | Клавиша сложения. |
Subtract | Клавиша вычитания. |
Multiply | Клавиша умножения. |
Divide | Клавиша деления. |
Управляющие клавиши | |
Tab | Клавиша "Tab" (Табуляция). |
CapsLock, Capital | Клавиша "Caps Lock" (Фиксация верхнего регистра). |
Enter | Клавиша "Enter" (Ввод). |
Return | Клавиша "Return" (Возврат каретки). |
Escape | Клавиша "Esc" (Выход из режима). |
Control | Клавиша-модификатор "Ctrl". |
ControlKey | Клавиша "Ctrl" (Ввод управляющего кода). |
Shift | Клавиша-модификатор "Shift". |
ShiftKey | Клавиша "Shift" (Переход в верхний регистр). |
Alt | Клавиша-модификатор "Alt". |
Menu | Клавиша "Alt" (Альтернативное значение). |
Insert | Клавиша "Ins" (Вставить) |
Back | Клавиша "Backspace" (Удаление символа слева от курсора). |
Delete | Клавиша "Del" (Удалить) |
Home | Клавиша "Home" (Переход в начало строки). |
End | Клавиша "End" (Переход в конец строки). |
LControlKey | Левая клавиша "Ctrl" (ввод управляющего кода). |
RControlKey | Правая клавиша "Ctrl" (ввод управляющего кода). |
LMenu | Левая клавиша "Alt" (альтернативное значение). |
RMenu | Правая клавиша "Alt" (альтернативное значение). |
LShiftKey | Левая клавиша "Shift" (переход в верхний регистр). |
RShiftKey | Правая клавиша "Shift" (переход в верхний регистр). |
LWin | Левая клавиша с эмблемой Windows (Клавиатура Microsoft Natural). |
RWin | Правая клавиша с эмблемой Windows (Клавиатура Microsoft Natural). |
Help | Клавиша "Help" (Вызов справки) |
LineFeed | Клавиша "LineFeed" (Перевод строки). |
Play | Клавиша "Play" (Воспроизвести). |
Pause | Клавиша "Pause" (Приостановка). |
Клавиша "Print" (Печать) | |
PrintScreen, Snapshot | Клавиша "Print Screen" (Печать экрана) |
Scroll | Клавиша "Scroll Lock" (фиксация режима прокрутки). |
Select | Клавиша "Select" (Выбор) |
Sleep | Клавиша перевода компьютера в режим "сна" (пониженного энергопотребления) |
Клавиши управления курсором | |
Left, Right | Клавиши "Стрелка влево" и "Стрелка вправо" |
Up, Down | Клавиши "Стрелка вверх" и "Стрелка вниз" |
PageUp, Prior | Клавиша "Page Up" (Прокрутка на страницу вверх). |
PageDown, Next | Клавиша "Page Down" (Прокрутка на страницу вниз). |
Кнопки мыши | |
LButton | Левую кнопку мыши. |
MButton | Средняя кнопка мыши (трёхкнопочная мышь). |
RButton | Правой кнопкой мыши. |
XButton1, XButton2 | Первая и вторая дополнительные кнопки мыши (пятикнопочная мышь). |
Другие клавиши | |
BrowserBack, BrowserFavorites, BrowserForward, BrowserHome, BrowserRefresh, BrowserSearch, BrowserStop | Клавиши работы в браузере (Windows 2000 и более поздние версии): – перехода назад; – перехода в "Избранное"; – перехода вперёд; – перехода на домашнюю страницу; – обновления страницы; – поиска; – остановки загрузки |
MediaNextTrack, MediaPlayPause, MediaPreviousTrack, MediaStop SelectMedia | Клавиши управления проигрывателем (Windows 2000 и более поздние): – переход на следующую запись; – начала / приостановки воспроизведения; – перехода на предыдущую запись; – остановки воспроизведения; – выбора записи |
VolumeDown, VolumeUp, VolumeMute | Клавиши уменьшения и увеличения громкости звука и его отключения (Windows версии 2000 или более поздней версии). |
Пример 4.10. Использование события KeyPress и KeyDown для предотвращения ввода запрещенных символов в элемент управления. События KeyPress и KeyDown отменяются при нажатии пользователем нечисловой клавиши с помощью свойства Handled (оно возвращает или задает значение, указывающее, было ли обработано событие).
private:
// Переменная (флаг) для фиксации ввода нечислового символа.
bool nonNumberEntered;
// Обработка события KeyDown для определения типа символа,
// введенного в элемент управления TextBox.
void textBox1_KeyDown(Object^ sender,
System::Windows::Forms::KeyEventArgs^ e) {
nonNumberEntered = false; // Инициализация флага в false.
// Определение, была ли нажата цифровая клавиша
// в верхней части клавиатуры.
if (e->KeyCode < Keys::D0 || e->KeyCode > Keys::D9) {
// Определение, была ли нажата цифровая клавиша
// на цифровой клавиатуры.
if (e->KeyCode < Keys::NumPad0 || e->KeyCode > Keys::NumPad9) {
// Определение, была ли нажата клавиша BackSpace.
if (e->KeyCode!= Keys::Back) {
// Была нажата нечисловая клавиша.
nonNumberEntered = true; // Установка флага в true.
}
}
}
// Если была нажата клавиша Shift, то это не число.
if (Control::ModifierKeys == Keys::Shift) {
nonNumberEntered = true; // Установка флага в true.
}
}
// Событие KeyPress возникает после события KeyDown и может быть
// использовано для запрета ввода пользователем некоторых символов.
void textBox1_KeyPress(Object^ sender,
System::Windows::Forms::KeyPressEventArgs^ e) {
// Проверка, установлен ли флаг в событии KeyDown.
if (nonNumberEntered == true) {
// Запрет ввода символа в элемент управления, т.к. он не числовой.
e->Handled = true;
}
}
Пример 4.11. Использование события KeyUp с классом справки (Help) для отображения всплывающей подсказки к текстовому полю textBox1 для пользователя приложения. Когда пользователь нажимает клавишу F1, класс Help отображает всплывающую подсказку, подобную ToolTip, рядом с элементом управления. В этом примере предполагается, что элемент управления TextBox с именем textBox1 был добавлен в форму, а к его событию KeyUp был привязан метод–обработчик события.
private:
void textBox1_KeyUp(Object^ sender,
System::Windows::Forms::KeyEventArgs^ e) {
// Определение, была ли нажата клавиша F1.
// Если да, то показать подсказку.
if (e->KeyCode == Keys::F1) {
// Отображение всплывающей подсказки для помощи пользователю.
Help::ShowPopup(textBox1, "Введите свое имя",
Point(textBox1->Right, this->textBox1->Bottom));
}
}