Тверской государственный университет
Опубликован: 13.09.2006 | Доступ: свободный | Студентов: 3491 / 369 | Оценка: 4.65 / 4.29 | Длительность: 30:37:00
Специальности: Программист, Менеджер
Лекция 14:

Проектирование интерфейса. Объекты диалоговых окон

Событие Click (Щелчок)

Это событие возникает по двум причинам:

  1. пользователь щелкнул элемент управления;
  2. пользователь явно выбрал некоторое значение при работе с элементом управления с несколькими возможными значениями.

По первой из этих причин событие Click возбуждается для таких элементов, как командная кнопка ( CommandButton ), рамка ( Frame ), изображение ( Image ), метка ( Label ), полоса прокрутки ( ScrollBar ) и счетчик ( SpinButton ). По второй - для элементов флажок ( CheckBox ), комбинированный список ( ComboBox ), список ( ListBox ), набор страниц ( MultiPage ), полоса вкладок ( TabStrip ) и выключатель ( ToggleButton ). Переключатель ( OptionButton ) также возбуждает это событие, когда меняет свое значение на True. В частности, событие Click наступает при:

  • щелчке элемента управления (щелчок правой кнопкой не вызывает событие Click ) ;
  • щелчке свободного места диалогового окна и по отключенному серому элементу;
  • нажатии клавиш Enter или "пробел", когда в фокусе находится командная кнопка [если никакая командная кнопка не находится в фокусе, то при нажатии Enter событие Click наступает для предопределенной командной кнопки (со значением True свойства Default ) ];
  • нажатии клавиши Esc в диалоговом окне с командной кнопкой, для которой свойство Cancel имеет значение True, при условии, что никакая другая командная кнопка не находится в фокусе;
  • нажатии клавиш-ускорителей.

При щелчке последовательно возбуждаются три события: MouseDown, MouseUp и Click.

Для некоторых элементов управления событие Click связано с изменением значения элемента (свойства Value ). Например, для набора страниц и полосы вкладок это происходит при щелчке новой закладки; для флажка и выключателя - при щелчке или нажатии клавиши "пробел", когда они находятся в фокусе, или при изменении их значений из программы; для списка или комбинированного списка - при выборе значения точно соответствующего некоторому значению в раскрывающемся списке (в частности, Click не возникает, если для строки в поле ввода комбинированного списка есть несколько возможных продолжений в раскрывающемся списке) и др. В этих случаях для отслеживания изменений значения элемента лучше использовать событие Change.

Вот заголовок процедуры обработки события Click для набора страниц и полосы вкладок:

Private Sub объект_Click (index As Long)

а для остальных элементов управления:

Private Sub объект_Click ()

Здесь объект - имя объекта, которому принадлежит процедура, а index - индекс страницы, на которой произошел щелчок.

Событие DblClick (Двойной щелчок)

Возникает, когда пользователь, установив указатель на объект, производит двойной щелчок. Для элементов, возбуждающих и событие Click, к событию DblClick приводит следующая цепь событий:

  1. MouseDown ;
  2. MouseUp ;
  3. Click ;
  4. DblClick.

А для элементов, не поддерживающих Click (например, поля ввода), из этой последовательности нужно удалить Click.

Если возвращенное значение свойства Cancel равно True, то при двойном щелчке пользователя второй щелчок игнорируется. Это позволяет, например, сделать так, что одинарный и двойной щелчки имеют одинаковое действие.

Заголовок процедуры обработки события Click для набора страниц и полосы вкладок имеет вид:

Private Sub объект_DblClick (index As Long,  ByVal Cancel As MSForms. ReturnBoolean)

а для остальных элементов:

Private Sub объект_DblClick (ByVal Cancel As MSForms. ReturnBoolean)

Здесь объект - имя объекта, которому принадлежит процедура, index - индекс страницы, на которой произошел щелчок, а Cancel - обязательный статус обработки события, его значение. False (по умолчанию) означает, что оно будет обрабатываться элементом, True - что событие будет обрабатываться приложением.

Событие DropButtonClick (Щелчок кнопки списка)

Возникает всякий раз при появлении и исчезновении выпадающего списка. Причиной появления этого события может быть исполняемая программа (вызов метода DropDown ) или нажатие пользователем клавиши F4. Когда список исчезает с экрана, событие DropButtonClick инициируется системой.

Заголовок процедуры обработки события имеет вид:

Private Sub объект_DropButtonClick ()

События Enter, Exit (Вход, Выход)

Событие Enter возникает перед тем, как фокус переместится на данный элемент из другого элемента диалогового окна. Exit возникает перед тем, как фокус переместится с данного элемента на другой.

Заголовки процедур обработки этих событий имеют вид:

Private Sub объект_Enter () 
Private Sub объект_Exit (ByVal Cancel As MSForms. ReturnBoolean)

Здесь объект - имя объекта, которому принадлежит процедура, а Cancel - обязательный статус обработки события, его значение False показывает, что оно будет обрабатываться элементом (устанавливается по умолчанию), True - что событие будет обрабатываться приложением, при этом фокус остается на текущем элементе. Таким образом, чтобы оставить в фокусе текущий элемент в процедуре объект_Exit, задайте True параметру Cancel.

Событие Enter естественно использовать для модификации данных в элементе в тот момент, когда он помещается в фокус, в зависимости от состояний и значений других элементов диалогового окна или от данных основного документа приложения. Exit позволяет проверять при выходе из поля ввода оставленные пользователем данные и сообщать об обнаруженных в них ошибках, а при выходе из списка изменять значения других элементов в зависимости от сделанного пользователем выбора.

Событие Error (Ошибка)

Возникает, когда элемент управления, обнаружив ошибку (не обрабатываемую данным приложением Office 2000), не может возвратить информацию о ней в вызывающую программу.

Процедура обработки события Error определяет действия системы при возникновении ошибки. Заголовок этой процедуры для набора страниц и полосы вкладок имеет вид:

Private Sub объект_Error (index As Long,  ByVal Number As Integer,  
ByVal Description As MSForms. ReturnString,  ByVal SCode As SCode,  
ByVal Source As String,  ByVal HelpFile As String,  ByVal HelpContext 
As Long,  ByVal CancelDisplay As MSForms. ReturnBoolean) ;

для других элементов:

Private Sub объект_Error (ByVal Number As Integer,  ByVal Description As MSForms. 
ReturnString,  ByVal SCode As SCode,  ByVal Source As String, ByVal HelpFile 
As String,  ByVal HelpContext As Long,  ByVal CancelDisplay As MSForms. 
ReturnBoolean).

Здесь параметры имеют следующий смысл:

  • объект - имя объекта, которому принадлежит процедура,
  • index - индекс страницы, на которой произошла ошибка,
  • Number - уникальный номер, используемый элементом для идентификации ошибки,
  • Description - текст с описанием ошибки,
  • SCode - задает код OLE статуса для данной ошибки (нижние 16 битов задают то же число, что и Number ),
  • Source - строка, идентифицирующая элемент управления, который инициирует ошибку,
  • HelpFile - полное имя пути к справочному файлу, содержащему описание ошибки,
  • HelpContext - идентификатор контекста файла справки с темой, описывающей ошибку,
  • CancelDisplay - булев параметр, определяющий выводить ли описание ошибки в окне сообщения.

События KeyDown, KeyUp (Клавиша нажата, Клавиша отпущена)

Событие KeyDown возникает, когда пользователь нажимает клавишу на клавиатуре, а событие KeyUp, - когда отпускает. Пока клавиша нажата, чередуются события KeyDown и KeyPress. Сообщения о нажатии клавиш получает диалоговое окно или элемент управления, находящиеся в фокусе. При этом диалоговое окно может находиться в фокусе, только если в нем нет элементов управления либо все они отключены ("серые"). Эти события появляются и при посылке в диалоговое окно кодов символов из макроса с помощью операции SendKeys или из программы VBA оператором SendKeys. Если посланный символ приводит к перемещению фокуса от одного элемента к другому, событие KeyDown происходит для первого из них, а события KeyPress и KeyUp - для второго.

События KeyDown и KeyUp не возникают при нажатии клавиш, если нажата клавиша:

  • - Enter, а в диалоговом окне есть командная кнопка со свойством Default, равным True ;
  • - Esc, а в диалоговом окне есть кнопка, для которой свойство Cancel равно True.

Заголовки процедур обработки этих событий выглядят так:

Private Sub объект_KeyDown (ByVal KeyCode As MSForms. 
ReturnInteger,  ByVal Shift As fmShiftState) 

Private Sub объект_KeyUp (ByVal KeyCode As MSForms. 
ReturnInteger,  ByVal Shift As fmShiftState)

Здесь объект - имя объекта, которому принадлежит процедура, KeyCode - число, являющееся кодом нажатой или отпущенной клавиши. Параметр Shift задает состояние клавиш Shift, Ctrl и Alt. Его возможные значения: fmShiftMask = 1 - нажата клавиша Shift, fmCtrlMask = 2 - нажата клавиша Ctrl, fmAltMask = 4 - нажата клавиша Alt.

Типичные примеры использования событий KeyDown и KeyUp связаны с обработкой нажатий дополнительных (не буквенных) клавиш: функциональных, клавиш-стрелок, Home, End, Pageup, Pagedown и Tab, цифровых. Они позволяют отреагировать также на нажатие комбинаций, состоящих из клавиши стандартной клавиатуры и одной из дополнительных клавиш-модификаторов (Shift, Ctrl или Alt). Для работы же со стандартными символами ANSI удобней использовать событие KeyPress.

Событие KeyPress (Клавиша нажата)

Возникает, когда пользователь нажимает клавишу с печатаемым символом (ANSI-клавишу). Это событие обычно происходит между нажатием и отпуском нажатой клавиши. Оно также появляется при посылке ANSI-кода в диалоговое окно из макроса с помощью операции SendKeys или из программы VBA оператором SendKeys. Точнее, событие KeyPress возникает при нажатии клавиш:

  • любого печатаемого символа;
  • Ctrl+символ стандартного алфавита;
  • Ctrl+ любой специальный символ;
  • Backspace;
  • Esc.

Событие KeyPress не возникает:

  • при нажатии клавиш Tab, Del или Enter;
  • при нажатии клавиш-стрелок;
  • когда при нажатии клавиши перемещается фокус.

Пока нажата ANSI-клавиша, чередуются события KeyDown и KeyPress. Когда пользователь отпускает эту клавишу, инициируется событие KeyUp. Сообщения о нажатии клавиш получает диалоговое окно или элемент управления, находящиеся в фокусе. При этом диалоговое окно может находиться в фокусе, только если в нем нет элементов управления либо все они отключены.

Заголовки процедур обработки этих событий выглядят так:

Private Sub объект_KeyPress (ByVal KeyANSI As MSForms. ReturnInteger)

Здесь объект - имя объекта, которому принадлежит процедура, KeyANSI - число, являющееся стандартным ANSI-кодом нажатой клавиши.

В процедуре обработки события KeyPress можно задать реакцию системы на нажатие пользователем стандартных клавиш или отмеченных выше комбинаций, имеющих код ANSI. Нажатия других клавиш или комбинаций следует обрабатывать процедурами для событий KeyDown и KeyUp.

Событие Layout (Расположение)

Возникает, когда диалоговое окно, рамка или набор страниц изменяют свои размеры. Для элементов со свойством AutoSize, равным True, это событие возникает, когда пользователь изменяет значения свойств, влияющих на размер элементов. Например, увеличение размера шрифта может привести к увеличению размеров поля ввода и рамки, в которой это поле находится, что вызовет событие Layout.

Для набора страниц заголовок процедуры обработки события Layout имеет вид:

Private Sub объект_Layout (index As Long),

а для других объектов:

Private Sub объект_Layout ()

Здесь объект - имя объекта, которому принадлежит процедура, index - индекс той страницы из набора страниц, которая меняет размер.

В процедуре обработки события Layout, можно вычислить новое положение элементов управления и перерисовать экран.

События MouseDown, MouseUp (Мышь нажата, Мышь отпущена)

Возникают, когда пользователь нажимает ( MouseDown ) и отпускает ( MouseUp ) кнопку мыши.

Заголовки процедур обработки этих событий для набора страниц и полосы вкладок имеют вид:

Private Sub объект_MouseDown (index As Long,  ByVal Button As fmButton,  
ByVal Shift As fmShiftState,  ByVal X As Single,  ByVal Y As Single)

и

Private Sub объект_MouseUp (index As Long,  ByVal Button As fmButton,  
ByVal Shift As fmShiftState,  ByVal X As Single,  ByVal Y As Single),

а для других элементов:

Private Sub объект_MouseDown (ByVal Button As fmButton,  
ByVal Shift As fmShiftState,  ByVal X As Single,  ByVal Y As Single)

и

Private Sub объект_MouseUp (ByVal Button As fmButton,  
ByVal Shift As fmShiftState,  ByVal X As Single,  ByVal Y As Single)

Здесь параметры имеют следующий смысл:

  • объект - имя объекта, которому принадлежит процедура,
  • index - индекс страницы или вкладки, для которой инициируется событие,
  • Button - число, определяющее, какая кнопка нажата ( 1 - левая, 2 - правая, 4 - средняя),
  • Shift - состояние клавиш Shift, Ctrl и Alt,
  • X и Y - горизонтальная и вертикальная координаты указателя мыши (измеряются в точках от левого края и от верхнего края окна, рамки или страницы).

Возможные значения параметра Shift:

Значение Описание
1 нажата клавиша Shift.
2 нажата клавиша Ctrl.
3 нажаты клавиши Shift и Ctrl.
4 нажата клавиша Alt.
5 нажаты клавиши Alt и Shift.
6 нажаты клавиши Alt и Ctrl.
7 нажаты клавиши Alt, Shift и Ctrl.

Для полосы вкладок параметр index определяет вкладку, которую щелкает пользователь. index - 1 означает, что пользователь щелкнул вне вкладки.

В диалоговом окне события MouseDown и MouseUp генерируются, если пользователь нажимает и отпускает кнопку мыши, когда указатель находится на свободном месте окна или на полосе прокрутки.

Типичная последовательность событий, связанных со щелчками выглядит так:

  • MouseDown ;
  • MouseUp ;
  • Click ;
  • DblClick ;
  • MouseUp.

Если кнопка мыши нажимается в тот момент, когда указатель находится над некоторым объектом, то этот объект "захватывает" мышь и получает в дальнейшем все связанные с ней события, включая последнее MouseUp. Поэтому координаты X и Y не всегда задают точку внутри границ объекта, получающего событие, связанное с мышью.

С помощью процедур обработки событий MouseDown и MouseUp можно выяснить, какая кнопка мыши нажата, и определить реакцию системы на эти щелчки. Параметр Shift позволяет также выяснить, какие из управляющих клавиш Shift, Ctrl и Alt при этом нажаты.

полина есенкова
полина есенкова
Дмитрий Вологжин
Дмитрий Вологжин
Добрый день, прошел тесты с 1 по 9, 10 не сдал, стал читать лекцию и всё пройденные тесты с 1 по 9 сбросились, когда захотел пересдать 10 тест.