Описание событий VB (Visual Basic)
Здесь размещены подробные описания всех событий всех основных элементов
управления, встроенных в Visual Basic. Сюда не входят события подключаемых
элементов управления, таких например, как Microsoft Common Controls и
т.п. Многие события снабжены примерами их использования. Всё переводилось
мной со стандартного Help'а VB5.
В Visual Basic структура обработчика событий имеет следующую схему:
[Private
| Public] Sub
Объект_ИмяСобытия ([arglist])
End
Sub
Внутри таких процедур и содержится основной код Visual Basic. Остальное
находится в пользовательских функциях и процедурах.
Выберите интересующее вас событие:
Событие
|
Причина
возникновения
|
Activate,Deactivate
|
Это
событие имеет только форма.
Activate - вызывается в тот момент, когда форма становится
активной (получает фокус). Однако, если перейти к другому приложению
Windows, а затем вернуться к своему, то это событие не произойдёт.
Оно срабатывает только при переключении между формами внутри программы.
Deactivate - Событие, обратное событию Activate. Вызывается
при потере фокуса формы.
|
Change
|
ComboBox — меняется текст в текстовой части
элемента. Происходит только тогда, когда свойство Style установлено
в 0 (Dropdown Combo) или 1 (Simple Combo) и юзер изменяет текст или
вы меняете его в коде программы.
DirListBox — Меняется выбранная директория. Происходит когда
юзер делает двойной клик на новой директории или когда меняется
свойство Path в коде.
DriveListBox — Меняется выбранное устройство. Происходит
когда юзер меняет устройство, выбрав его из списка, или когда меняется
свойство Drive в коде.
HScrollBar и VScrollBar (горизонтальная и вертикальная
прокрутки) — Подвинулся скрол. Происходит когда юзер передвинул
и отпустил полоску прокрутки или меняется свойство Value в коде.
Label — Меняется содержимое метки. Происходит когда меняется
свойство Caption в коде.
PictureBox — Меняется содержимое PictureBox. Происходит
при смене свойства Picture. (а также при использовании LoadPicture,
прим.eax)
TextBox — Меняется текст в текстовом поле. Происходит при
смене текста юзером или при смене свойства Text в коде.
|
Click
|
Происходит когда юзер нажимает и отпускает кнопку
мышки над оъектом. Оно также может происходить при смене некоторого
значения объекта.
Для формы такое собитие выполняется при клике на свободном месте
формы, или по отключённому элементу управления (т.е. когда его Enabled
= False).
Вообще событие происходит и для правой кнопки мыши и для левой.
Но для элементов CheckBox, CommandButton, Listbox,
и OptionButton происходит только при нажатии левой кнопки
мыши.
Для ComboBox или ListBox оно происходит и при клике
мышой и также при смене текущего элемента клавишами курсора.
Происходит при нажатии на "ПРОБЕЛ" у элементов CommandButton,
OptionButton, или CheckBox, когда те имею фокус.
При нажатии на ENTER при фокусе на элементе CommandButton
(то бишь гашей кнопке) и когда установлено свойство Default.
Происходит при нажатии на ESC когда форма имеет Cancel кнопку -
CommandButton с установленым свойством Cancel.
Также происходит при нажатии на горячую последовательность. Например,
если кнопка имеет Caption - "&Go", то при нажатии
Alt+G запуститься событие.
Также, событие Click может быть сгенерировано в следующих случаях
в коде: Установка значения Value для OptionButton и CheckBox.
|
DblClick
|
Происходит при двойном клике по объекту.
Для формы происходит при двойном клике по форме, а также по отключённому
объекту.
Для других элементов:
Двойной клик по объекту левой кнопкой.
Двойной клик по элементу в ComboBox, когда Style = 1. Или
также в FileListBox, ListBox, DBCombo, или
DBList.
|
DragDrop
|
Происходит при завершении операции перетаскивания
(Drag&Drop). В обработку события передаются 3 аргумента - координаты
курсора (X,Y), где был отпущен объект, и ссылка на
объект (Source), который был перетащен.
|
DragOver
|
Происходит когда объект перетаскивается над получателем,
но кнопка ещё не отпущена. Имеет 4 параметра. Координаты курсора,
ссылка на объект, и текущее состояние (State As Integer):
0 = Enter (вошёл) (источник вошёл в область объекта).
1 = Leave (покинул) (источник ушёл из этой области).
2 = Over (над) (произошёл сдвиг в пределах области).
|
Error
|
Происходит только при работе с базами данных.
Коркретно: при ошибке в доступе к данным при выполнении кода.
Имеет 2 параметра:
dataerr - номер произошедшей ошибки
response - номер, соответствующий выбранному в настройках
(Settings):
Если vbDataErrContinue, то response = 0 (Продолжить)
Если vbDataErrDisplay, то response = 1 (Default) Показать сообщение
об ошибке.
|
GotFocus
|
Происходит, когда объект получает фокус, или при
нажатии кнопки Tab или кликом по объекту, а также при запуске метода
SetFocus в программе. Форма получает фокус только тогда, когда все
видимые элементы отключены (Enabled = False).
|
Initialize
|
Это событие имеет только форма.
Обрабатывается первым и один раз. Visual Basic вызывает его при первом
создании формы. Здесь обычно размещают код, для инициализации нужных
переменны в программе.
|
ItemCheck
|
Происходит когда у ListBox контрола свойство Style
установлено в 1 (checkboxes) и выбран или сброшен флажок у какого-либо
элемента (item) в контроле.
Передаётся один параметр:
index - номер элемента, который был выбран в ListBox.
|
KeyDown,
KeyUp
|
Происходит когда юзер нажимает (KeyDown) или отпускает
(KeyUp) клавишу, в то время как объект имеет фокус. Чтобы получить
код клавиши, используйте событие KeyPress. Параметров нет.
|
KeyPress
|
Происходит когда юзер нажамает и отпускает клавишу
на клавиатуре.
Событие имеет один параметр:
keyascii - код нажатой клавиши. Например, если нажать на
клавишу "1" (основного ряда), то keyascii будет равен
49. Если нажать ESC, то 27, и и.д.
Если присвоить этой переменной 0, то нажатая буква (символ) не
появится в текством поле. Иногда это бывает очень удобным. Например,
можно сделать так, чтобы в текстовое поле можно было вводить только
цифры.
|
LinkClose
LinkError
LinkNotify
LinkOpen
|
LinkClose: Происходит когда DDE соединение закрывается.
Может произойти в любое время.
LinkError: Происходит при возникновении ошибки в ходе связи DDE.
LinkNotify: Происходит когда у источника меняются данные, на которые
установлена ссылка DDE.
LinkOpen: Происходит при создании инициализации DDE связи с источником.
За подробностями пожалуйста обращайтесь к справочникам, т.к. эти
события используются очень редко.
|
Load
|
Это событие имеет только форма.
Обрабатывается при загрузке формы в память. Происходит после события
Initalize. Обычно код испольняется один раз. При запуске программы,
это событие обрабатывается автоматически для той формы, которая загружается
первой.
Это событие может выполняться несколько раз. Т.е. если вы выгрузите
форму оператором Unload, а затем вновь загрузите оператором Load
или методом Show, то это событие будет выполнено.
|
LostFocus
|
Происходит при потере объектом фокуса, или при
нажатии Tab юзером, или при использовании метода SetFocus для другого
объекта.
|
MouseDown,
MouseUp
|
Происходят когда юзер нажимает (MouseDown) или
отпускает (MouseUp) кнопку мыши.
Имеют 4 передаваемых параметра:
button - содержит integer - номер кнопки мыши. С помощью
этого события можно опеределить какую кнопку нажал пользователь.
Для этого используюся константы: vbLeftButton (левая), vbMiddleButton
(средняя), vbRightButton (правая). Проверить можно примерно так:
If
button = vbRightButton Then ...
shift - содержит integer - указывающее на состояние клавиш
Shift, Alt и Ctrl. Бит 0 - Shift, бит 1 - Ctrl, бит 2 - Alt. Для
опредения факта нажатия клавиш Ctrl и Alt можно использовать такой
код:
If
(Shift And (vbCtrlMask Or
vbAltMask)) = (vbCtrlMask Or vbAltMask)
Then ...
Т.е. мы проверяем содержит ли переменная Shift биты 1 и 2 (оператором
And). Скобки везде обязательны. vbShiftMask, vbAltMask, vbCtrlMask
- это обычные константы, содержащие маски битов:
vbShiftMask
= 1 (нулевой бит) Bin: 00000001
vbCtrlMask = 2 (первый бит) Bin: 00000010
vbAltMask = 4 (второй бит) Bin: 00000100
x, y - координаты курсора мыши того места, где произошло
событие MouseUp или MouseDown. Координаты всегда зависят от координытной
системы, задаваемой свойствами ScaleHeight, ScaleWidth, ScaleLeft,
ScaleTop объекта.
|
MouseMove
|
Происходит когда курсор мыши изменяет своё положение
над объектом. Т.е. когда курсор стоит на месте, событие не происходит.
При каждом сдвиге курсора - срабатывает.
Параметры те же, что и у MouseDown и MouseUp.
|
ObjectMove
|
Происходит немедленно после того, как OLE контейнер
сдвигается или меняет размеры пока объект активен.
Передаваемые параметры:
left - координата левой грани OLE контейнера
top - координата верхней грани OLE контейнера
width - ширина OLE контейнера
height - высота OLE контейнера
|
OLECompleteDrag
|
Происходит когда компонент - источник "брошен"
на компонент - цель, информируя объект о том, что либо завершён,
либо отменён процесс перетаскивания.
Имеет один параметр:
effect - привожу оригинал: A long integer set by the source
object identifying the action that has been performed, thus allowing
the source to take appropriate action if the component was moved
(such as the source deleting data if it is moved from one component
to another). The possible values are listed in Settings.
А Settings может быть:
vbDropEffectNone = 0 - операция "бросания" (Drop) была
отменена.
vbDropEffectCopy = 1 - показывать значок копирования данных.
vbDropEffectMove = 2 - "сбрасываемые" данные являются
ссылкой на оригинальные данные.
|
OLEDragDrop
|
Это событие происходит когда на объект сбрасываются
OLE данные. Например, происходит при перетаскивании на объект файлов
из проводника, или перетаскивании изображения из Internet Explorer
и т.п.
Замечание: Это событие происходит только в том случае, когда свойство
OLEDropMode установлено в 1 (Manual).
Имеет очень много параметров:
data - объект типа DataObject. Имеет 4 метода и одно свойство
- коллекцию файлов, перетаскивамых на объект. Для получения данных
можно использовать метод GetData. Чтобы узнать формат данных, перекинутых
на объект можно использовать метод GetFormat.
effect Long - привожу оригинал - set by the target component
identifying the action that has been performed (if any), thus allowing
the source to take appropriate action if the component was moved
(such as the source deleting the data). The possible values are
listed in Settings.
button - то же, что и в событии MouseDown(Up).
shift - то же, что и в событии MouseDown(Up).
x,y - то же, что и в событии MouseDown(Up).
Пример. Обработаем перетащенные на форму файлы. Не забудьте установить
свойство OLEDropMode в 1.
Private
Sub
Form_OLEDragDrop _
(Data
As DataObject, Effect As
Long, _
Button As Integer, Shift As
Integer, _
X As Single, Y As
Single)
' перетаскиваются файлы?
If Data.GetFormat(vbCFFiles) = True
Then
Dim c As Long
' пройдёмся по всей коллекции
For c = 1 To
Data.Files.Count
' покажем имя перетащенного файла
MsgBox "Был перетащен файл: " & Data.Files(c)
Next c
End If
End Sub
|
OLEDragOver
|
Происходит при перетаскивании
над объектом. Парметры - комбинация парамтров событий OLEDragDrop
и обычного DragOver. |
OLEGiveFeedback
|
Происходит после каждого события OLEDragOver.
OLEGiveFeedback позволяет источнику обеспечивать визуальную "отдачу"
пользователю, такое, как изменение курсора мыши (посмотрите на него
при перетаскивании файлов в проводнике с нажатым Ctrl, - видите
значок "+", вот это и есть та "отдача"?), которое
будет говорить пользователю о том, что происходит.
Параметры - effect и
defaultcursors - boolean - разрешает или запрещает использование
курсора по умолчанию. Если True - то используется курсор по умолчанию,
если False, то использутся курсор, указанный пользователем в свойстве
MousePointer объекта Screen.
|
OLEStartDrag
|
Происходит тогда, когда начинается перетаскивание
(т.е. когда перетаскиваемый объект (файл, например) появляется над
объектом приёмником). Имеет 2 параметры:
data - то же что и у события OLEDragDrop.
allowedeffects - Long - содержит поддерживаемые источником
эффекты. Возможные значения описаны в Setting'сах.
|
Paint
|
Происходит когда часть или весь объект появляется
на экране после сдвига или изменения размера. Событие происходит
также при сдвиге окна, которое закрывает объект.
Разберём чуть подробнее:
Событие Paint полезно, если вы используете графические методы объекта
(Line, PSet...) в коде. С помощью этого события вы можете убедиться
в том, что данные перерисовались, когда это необходимо.
Событие Paint вызывается при запуске метода Refresh.
Если AutoRedraw установлено в True, то перерисовка происходит автоматически,
таким образом, это событие теряет свою необходимость.
Если свойство ClipControls установлено в False, то графические
методы в процедуре Paint воздействуют только на видимую часть формы;
иначе, графические методы перерисовывают всю открытую часть формы
(т.е. ту, которая не перекрыта такими элементами, как Image, Label,
Line, и Shape).
Используя метод Refresh в событии Resize вызывает перерисовку всего
объекта каждый раз, когда происходит изменение его размеров (Resize).
Замечание: Используя событие Paint для определённых задач, может
произойти каскадирование событий (Т.е. просто напросто произойдёт
рекурсия, когда Paint будет вызывать сам себя, и произойдёт переполнение
стека). Чтобы этого избежать, нужно придерживаться следующих правил:
· Избегать вызова события Paint при сдвиге или изменении размеров
объекта.
· Внутри события Paint изменять свойства, которые могут вызвать
событие Paint. Такие, например, как BackColor.
· Включать метод Refresh метод внутрь Paint.
|
PathChange
|
Происходит при смене пути, установкой свойства
FileName или Path в коде.
Замечание: Вы можете использовать это события, чтобы сообщить FileListBox'у
о том, что путь у DirListBox изменился.
|
PatternChange
|
Происходит при изменении маски (такой, как "*.*")
установкой свойств FileName или Pattern в коде.
|
QueryUnload
|
Это событие имеет только форма.
Происходит перед закрытием формы или приложения. Если закрывается
MDI форма, то это событие происходит сначала для формы контейнера,
и лишь потом для дочерних форм.
Это событие происходит перед событием Unload.
В обработчик данного события передаётся два параметра:
cancel - integer - если в обработчике события присвоить переменной
cancel значение True, то выгрузка формы будет отменена. Если оставить
там False, то форма благополучно выгрузится.
unloadmode - константа. Содержит значение - почему происходит выгрузка
формы. Может принимать:
vbFormControlMenu = 0 - юзер выбрал команду Close (Закрыть) в меню
приложения (слева вверху в заголовке формы).
vbFormCode = 1 - произошёл вызов оператора Unload в коде программы.
vbAppWindows = 2 - Windows завершает работу.
vbAppTaskManager = 3 - закрытие приложения происходит через Ctr+Alt+Del.
vbFormMDIForm = 4 - дочерняя MDI форма закрывается, т.к. закрывается
главная.
Замечания:
Вообще, это событие обычно применяется для проверки завершённости
некоторых действий. Или также, например, здесь можно спросить юзера,
действительно ли он хочет выйти из приложения, или это произошло
случаянно. Следать это можно примерно так:
Private
Sub
Form_QueryUnload _
(Cancel As Integer, _
UnloadMode As Integer)
Dim rez As
VbMsgBoxResult
rez = MsgBox("Вы действительно" & _
" хотите выйти?", _
vbQuestion + vbYesNo)
If rez = vbNo Then
Cancel = 1
End Sub
|
Reposition
|
Происходит когда запись становится текущей записью.
Замечания:
Когда Data контрол загружен, первая запись в объекте RecordSet
становится текущей, и вызывается это событие. Когда бы юзер не кликнул
любую кнопку на контроле Data, передвигаясь с записи на запись,
или вы используете одно из методов Move в коде (такие, как MoveFirst,
MoveNext, FindFirst..), или любое другое свойство, которое может
изменить текущую запись - происходит событие Reposition.
Событие Validate происходит перед этим событием.
|
Resize
|
Происходит когда объект первый раз появляется
или когда меняется состояние окна (например, при свёртывании и развёртывании
окна). А также при смене размеров окна.
Это событие удобно использовать, если вы хотите сделать "растягивающийса"
интерфейс. Т.е. когда все элементы на форме меняют свои размеры,
в зависимости от текущих размеров формы. Код для изменения размеров
этих элеметов как раз можно поместить в это событие.
|
Scroll
|
Происходит тогда, когда сдвигается полоса прокрутки
(ScrollBar).
Замечания:
Для DBGrid это событие происходит, когда двигается вертикальная
или горизонтальная полоса прокрутки.
Для ComboBox это событие происходит при сдвиге скролбара в выпадающем
списке.
Вы можете использовать это события для синхронизации изменения
положения полоски прокрутки и другими объектами, с которыми эта
полоска связана. К примеру, в обработку этого события вставить код,
который будет синхронизировать текущую позицию с другим элеметом.
Поместите на форму HScroll и вставьте такой код:
Private
Sub
HScroll1_Scroll()
    Form1.Caption = HScroll1.Value
End Sub
Теперь в заголовок формы будет меняться в соответствии со сменой
положения полоски прокрутки.
Кстати, избегайте использования фукнции MsgBox в этом событии!
|
Terminate
|
Это событие имеет только форма.
Происходит когда все ссылки на экземпляры форм, MDI форм, элементы
управления, классы удалены из памяти (установкий переменной в Nothing).
Это событие выполняется после события Unload, и выполняется самым
последним в программе. Можете использовать его по своему усмотрению.
|
Timer
|
Это событие имеется только у элемента управления
Timer.
Оно происходит через определённый интервал времени, указанный в
его свойтве Interval.
Timer невидим для пользователя, и полезен для внутренних процессов
программы.
Его можно использовать когда необходимо, чтобы некоторый код программы
выполнился через определённый промежуток времени.
Например, с его помощью можно сделать часы. Для этого достаточно
поместить на форму элемент Timer, установите его свойство Interval
в 1000 (1 сек = 1000 мс), и вставить следующий код:
Private
Sub Timer1_Timer()
    Form1.Caption = Time
End Sub
Функция Time возвращает текущее системное время. Таким образом,
каждую секунду будет выполнять событие Timer, и следовательно изменение
заголовка формы.
Примечание: количесво таймеров на форме не ограничего.
|
Unload
|
Это событие имеет только форма.
Происходит когда форма выгружается из памяти (оператором Unload,
например, или нажатием на крестик). В дальнейшем она может быть загружена
оператором Load.
При перезагрузке формы ВСЕ ЭЛЕМЕНТЫ УПРАВЛЕНИЯ ИНИЦИАЛИЗИРУЮТСЯ
ЗАНОВО, т.е. все значения, которые были в них - теряются.
|
Updated
|
Происходит когда меняются данные (при работе с
БД).
Имеет параметр Code - integer - описывает, как объект был
изменён (описано в настройках). Может принимать следующие константы:
vbOLEChanged = 0 - Данные объекта изменились
vbOLESaved = 1 - Данные объекта были сохранены приложением
vbOLEClosed = 2 - Файл, на который ссылается объект был закрыт
vbOLERenamed = 3 - Файл, на который ссылается объект был переименован
|
Validate
|
Это событие нужно для проверки введённых данных.
Например, в TextBox. Это событие выполняется только тогда, когда
свойство объекта CausesValidation = True.
Рассмотрим пример, как можно проконтролировать данные, введённые
в текстовое поле. Поместите на форму TextBox и вставьте код:
Private
Sub
Text1_Validate _
(Cancel As Boolean)
    If Not (IsNumeric(Text1.Text))
Then
        Text1.ForeColor = vbRed
        MsgBox "Введите в TextBox
числа"
        Cancel = True
    Else
        Text1.ForeColor = vbButtonText
    End If
End Sub
Этот код не примет введённый в TextBox текст, пока тот не будет
являться числом. Если установить параметр Cancel в True, то фокус
вернётся обратно TextBox.
Это событие происходит при потере фокуса у объекта.
|
|