2. В окне дизайнера введите в поле компонента ContextMenu, расположенное в области меню формы, имя первого элемента. Когда появятся дополнительные поля, введите в них имена дополнительных элементов меню; продолжайте, пока не создадите все элементы меню.
3. В окне Properties задайте необходимые значения для свойств элементов меню.
4. Выберите форму или элемент управления, с которым хотите связать данное контекстное меню. В окне свойств элемента управления или формы занесите в свойство ContextMenu имя компонента контекстного меню. Если во время выполнения щелкнуть правой кнопкой этот элемент управления или форму, откроется назначенное контекстное меню. Одно контекстное меню разрешается связывать с несколькими элементами управления, но у элемента управления может быть только одно контекстное меню.
Изменение меню во время выполнения
Меню можно динамически изменять в зависимости от условий времени выполнения. Например, если в данный момент отдельная команда недоступна, имеет смысл деактивировать вызывающий ее элемент. Можно представить пользователю дополнительную информацию, снабжая элементы меню флажками и переключателями.
Чтобы закрыть пользователю доступ к тем или иным элементам меню, когда это нежелательно, их стоит сделать невидимыми. Кроме того, во время выполнения можно добавлять элементы к меню, а также объединять меню и клонировать их.
Активация и деактивация команд меню
У каждого элемента меню есть свойство Enabled. Установив его в false, вы деактивируете элемент меню, запрещая ему реагировать на действия пользователя, в том числе на клавиши доступа и быстрые клавиши. Деактивированные элементы меню выделены бледно-серым цветом. Следующий пример показывает, как деактивировать элемент меню во время выполнения.
MenuItem1.Enabled = false;
Отображение элементов меню с флажками
Свойство Checked можно снабдить элемент меню флажком, который отображается справа от имени элемента. Флажки позволяют пометить выбранные параметры.
Следующий пример демонстрирует, как пометить элемент меню флажком и снять флажок:
// Пометить элемент меню флажком
MenuItem1.Checked = true;
// Снять флажок у элемента меню
MenuItem1.Checked = false;
Отображение элементов меню с переключателями
Вместо флажка можно отображать переключатель. Для этого свойство RadioCheck элемента меню следует установить в true, в результате справа от имени элемента меню отобразится не флажок, а переключатель. Если же свойство Checked установлено в false, ни фдажок, ни переключатель не отображаются. Заметьте, что переключатели часто применяют для выбора взаимоисключающих параметров, например цвета фона. Чтобы при установке одного переключателя остальные сбрасывались, вам придется самостоятельно написать соответствующий код.
Как сделать элемент меню невидимым
Чтобы сделать элемент меню невидимым, установите его свойство Visible в false. Это свойство позволяет изменять меню во время выполнения в зависимости от некоторых условий. Вот как это делается:
menuItem1.Visible = false;
Заметьте, что элементы, сделанные во время выполнения невидимыми, удаляются из меню, а их вложенные элементы становятся недоступными.
Создание элементов меню во время выполнения
Разрешается динамически добавлять к меню новые элементы во время выполнения. Например, к меню File можно добавить элементы, отображающие путь к недавно открывавшимся файлам. У новых элементов меню нет обработчиков событий, однако можно задать метод, обрабатывающий событие Click, передав ею конструктору элемента меню как аргумент. Этот метод должен быть процедурой ( void) с сигнатурой обработчика события. Вот примеры подходящих методов:
public void ClickHandler (object sender, System. EventArgs e)
{
// Реализация опущена
}
Создание элементов меню во время выполнения
1. Объявите новый элемент меню и создайте его экземпляр. При желании можно сразу же задать метод-обработчик события Click:
// Зтот пример предполагает наличие метода myClick
// с сигнатурой обработчика события
Menultern myltem;
myltem = new Menu Item("Item 1", new EventHandler(myClick));
2. Добавьте новый элемент к набору элементов расширяемого меню.
MainMenul. Menu! tems. Add{myltem);
... _. . . ...... __ и чУ
1.5. Проверка данных, вводимых
пользователем
Как правило, через интерфейс пользователи передают приложениям различную информацию. Проверка вводимых данных гарантирует, что пользователю разрешается продолжить работу с программой только после ввода данных, отвечающих заданным параметрам. Предположим, что в группе полей для ввода адреса есть поле почтового индекса. Прежде чем принять введенное в это поле значение, следует удостовериться, что пользователь ввел именно пять символов, причем все пять - цифры. Проверка введенных пользователем данных уменьшает вероятность ошибки ввода и повышает устойчивость приложения.
На этом занятии вы научитесь применять события для проверки пользовательского ввода и передачи фокуса ввода другим формам и узнаете, как выполнить проверку на уровне полей (когда поля проверяются по мере их заполнения) или на уровне формы (когда все поля проверяются одновременно). Вы также научитесь задавать диапазон допустимых значений при помощи свойств элемента управления и применять компонент ErrorProvider для отображения пользователю сообщений с описанием допущенной им ошибки.
Разработчик вправе указать один из двух типов проверки вводимой информации: на уровне поля и на уровне формы. Проверка на уровне формы выполняется после того, как пользователь заполнит все поля формы. Предположим, что пользователь должен заполнить поля для ввода имени, адреса и номера телефона, а затем щелкнуть ОК. Если задана проверка на уровне формы, все поля формы проверяются одновременно после щелчка кнопки ОК.
При использовании проверки на уровне поля все поля проверяются по отдельности по мере их заполнения. Например, прежде чем пользователь перейдет к следующему полю после ввода телефонного номера, в указанном им номере проверяется код города. Применение событий элементов управления позволяет по мере ввода символов номера удостовериться, что вводимые символы являются цифрами.
Проверка на уровне поля
В ряде случаев необходимо проверять данные сразу же после их ввода, что позволяет осуществлять проверку полей по мере их заполнения
Применение свойств элемента управления TextBox
Чаще всего для приема данных от пользователя применяется элемент управления TextBox. Некоторые из его свойств позволяют ограничивать диапазон значений, вводимых в текстовое поле, например:
• MaxLength
• PasswordChar
• Readonly
• Multiline
MaxLength
Свойство MaxLength ограничивает число символов, которые можно ввести в текстовое поле. Если пользователь попытается ввести больше символов, чем задано свойством MaxLength, текстовое поле не примет избыточные символы, а пользователь услышит звуковой сигнал. С помощью этого свойства удобно создавать поля для ввода значений фиксированной длины, например почтовых индексов.
PasswordChar
Свойство PasswordChar позволяет скрывать от посторонних глаз значение, вводимое во время выполнения. Например, если сделать значением свойства PasswordChar звездочку (*), текстовое поле будет отображать все вводимые пользователем символы как звездочки. Этот прием обычно используют для защиты паролей в окнах входа.
Для замены пароля вы можете назначить любой допустимый символ, например точку с запятой или знак «&». Независимо от назначенного символа, свойство Text всегда содержит то значение, которое реально ввел пользователь.
ReadOnly
Свойство ReadOnly определяет, разрешено ли пользователю редактировать значение текстового поля. Если это свойство установлено в true, пользователю не удастся изменить отображаемый в поле текст, в противном случае значение текстового поля можно редактировать, как обычно.
Multiline
Свойство Multiline определяет, одна или много строк в поле. Если оно установлено в true, пользователь может вводить многострочный текст, завершая строки символом возврата каретки. Введенные строки сохраняются в виде строкового массива в наборе Text Box. Lines. Чтобы получить нужную строку, следует указать ее индекс в массиве.
Применение событий для проверки на уровне поля
Обработка событий, связанных с клавиатурой, на уровне поля позволяет немедленно проверять любые данные, вводимые пользователем. Элементы управления, способные принимать ввод с клавиатуры, генерируют следующие три события:
• Key Down
• KeyPress
• KeyUp
События KeyDown и KeyUp
Нажатие и освобождение любой клавиши сопровождается генерацией события KeyDown и KeyUp соответственно. Источником событий является элемент управления, обладающий фокусом ввода. Элемент управления, генерировавший событие, передает сведения о нажатой (или отпущенной) клавише (или сочетании клавиш) через экземпляр класса KeyEventArgs — класса, описывающего сочетание клавиш. В сигнатуре метода, обрабатывающего событие KeyDown или KeyUp, должен быть параметр типа KeyEventArgs.
Чаще всего события KeyDown и KeyUp используют, чтобы определить, нажаты ли клавиши Alt, Ctrl или Shift. Результат передается обработчику соответствующего события через ссылку на экземпляр класса KeyEventArgs. Его свойства Ait, Ctrl и Shift возвращают значения типа Boolean, указывающие, были ли нажаты соответствующие клавиши. Значение True свидетельствует о том, что клавиша была нажата, а false — о том, что нет. Ниже показан пример обработчика события KeyUp, проверяющего нажатие клавиши Alt:
private void textBox1_KeyUp(object sender,
System. Windows. Forms. KeyEventArgs e)
{
if (e. Alt == true)
MessageBox. Show("The ALT key is still down");
}
Свойство KeyEventArgs. KeyCode позволяет определить, какая именно клавиша спровоцировала событие. Это свойство возвращает код нажатой или отпущенной клавиши (соответственно при событиях KeyDown или KeyUp). Ниже показан пример простого обработчика события, отображающего сообщение с кодом нажатой клавиши:
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 |


