Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11642
Последний выпуск: 19.06.2015

Методы и события форм

<< Оглавление

Методы и события форм

Основные свойства форм я рассматривал в статье "Фундамент программы или основные свойства форм", пришло время рассмотреть основные методы и события форм.

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

Так же советую, прежде чем садиться разрабатывать любое приложение, приложите усилия и просмотрите все свойства и разберите аспекты, которые могут пригодиться вам при разработке. Либо в голове, либо на бумаге составьте план. Разработайте графический интерфейс, т.е. расположите на формах все необходимые элементы управления. Разберитесь с помощью, каких методов и событий будут совершаться действия в вашем приложении. Вспомните или изучите параметры этих методов и возможное их применение.

Только после этого приступайте к написанию программного кода.

А незнание главных моментов работы с тем или иным элементом управления может привести к тому, что время, потраченное на написание кода, будет потеряно, а результат не достигнут. Будет достаточно обидно, если вы разработали алгоритм для своего приложения, забыв о методе, который, допустим, позволит проделать весь ваш код двумя строчками. И получится, что все ваши усилия были потрачены зря.

Чтобы такого не произошло, еще раз советую, всегда помнить, как и с помощью чего можно произвести, то или иное действие над элементом управления или переменной.

Для начала, откройте диалоговое окно Options: в меню Tools. И проверьте, установлена ли галочка Auto List Members - автоматически выводить список всех свойств и методов выбранного объекта.


Рис 1. Диалоговое окно Options, вкладка Editor

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

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


Рис 2. Меню, содержащее методы и свойства выбранного объекта

Выбрать нужный метод можно, как щелчком мыши, так и нажатием клавиши Tab на клавиатуре. Если воспользоваться клавишей Enter, то вы перейдете на следующую строку и не установите значение для выбранного свойства, т.е. придется прилагать новые усилия, чтобы вернуться на нужную строку.

Свойства и методы имеют разные иконки, так что их легко различить.

Методы:


Свойства:


Рассмотрим основные методы работы с формой.

Circle - позволяет нарисовать эллипс, окружность, дугу или сектор. Свойство формы AutoRedraw установите в True.

Синтаксис:

Объект.Circle [Step] (X, Y), радиус, [Цвет], [Начало], [Конец], [Отношение] 

Пример использования:

Me.Circle (1000, 1000), 500, vbRed 

Рисует круг красного цвета с радиусом 500.

Me.Circle (1000, 1000), 500, vbRed, , , 0.5 

Рисует эллипс, сжимая круг по вертикальной оси.

Const P = 3.141593 
Me.Circle (1000, 1000), 500, vbRed, , P / 2, P 

Рисует дугу.

Cls - очистка формы или PictureBox. Очищает графическое содержание окна программы.

Пример использования:

Программа рисует круг, разбитый на секторы с разными стилями штриховки и разными цветами рисования.

Код:

Option Explicit 

Private Sub Form_Load() 
Timer1.Interval = 100 
End Sub 

Private Sub Timer1_Timer() 
Const P = 3.141593 
Dim i As Integer 
Dim dblStart, dblEnd As Double 

Randomize Timer 

dblEnd = -0.001 
For i = 1 To 6 
    FillStyle = i + 1 
    dblStart = dblEnd 
    FillColor = Int(Rnd(1) * 65535) + 16777215 
    ForeColor = Int(Rnd(1) * 16777215) + 65535 
    DrawWidth = 2 
    dblEnd = -(2 * P / 6) * i 
    Circle (150, 100), 70, , dblStart, dblEnd 
Next 
End Sub 

Hide - позволяет удалить форму с экрана, но не выгружает из памяти.

Line - позволяет нарисовать линию или прямоугольник. Свойство формы AutoRedraw установите в True.

Синтаксис:

Объект.Line [Step] (X1, Y1) [Step] - (X2, Y2) , [Цвет], [F] 

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

Пример использования:

Me.Line (1000, 1000)-(2000, 2000), vbBlue 

Рисует линию синего цвета.

Me.Line (500, 500)-(4000, 2000) 

Рисует линию тем цветом, который установлен в свойстве ForeColor формы.

Me.Line (1000, 1000)-(2000, 2000), vbRed, BF 

Рисует квадрат, залитый красным цветом.

Move - позволяет переместить форму.

Синтаксис:

Me.Move [Левый край], [Верхний край], [Ширина], [Высота] 

Пример использования:

Me.Move 2000, 2000, 5000, 5000 

Перемещает форму, изменяя размер.

Me.Move 100, 7000 

Перемещает форму, параметры размера не указаны.

PaintPicture - позволяет скопировать определенную область на форме или PictureBox в другой рисунок. Свойство формы AutoRedraw установите в True.

Синтаксис:

Me.PaintPicture [Источник], [X1], [Y1], [Ширина1], [Высота1], [X2], [Y2], [Ширина2], [Высота2], [Операция] 

Константы параметра "операция":

  • Const vbDstInvert = 5570569 (&H550009) Инвертирование конечного рисунка.
  • Const vbNotSrcCopy = 3342344 (&H330008) Копирование инвертированного источника в конечный рисунок.
  • Const vbSrcAnd = 8913094 (&H8800C6) Операция AND, для пикселей источника и конечного рисунка.
  • Const vbSrcCopy = 13369376 (&HCC0020) Копирование источника в конечный рисунок. Установлено по умолчанию.
  • Const vbSrcInvert = 6684742 (&H660046) Операция XOR, для пикселей источника и конечного рисунка.
  • Const vbSrcPaint = 15597702 (&HEE0086) Операция OR, для пикселей источника и конечного рисунка.

Пример использования:

Me.PaintPicture Picture1, 0, 0, 3000, 3000, 0, 0, 3000, 3000, vbSrcCopy 

Копирует изображение из Picture1 на форму, обрезая его соответственно заданным координатам.

Point - возврат значения цвета выбранной точки. Если координаты выпадут за пределы формы, возвратит -1.

Пример использования:

Label1 = Me.Point(2, 2) 

PopupMenu - позволяет показать контекстное меню.

Пример использования:

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) 
If Button = 2 And vbRightButton Then 
'проверка, нажата ли правая клавиша мыши 
PopupMenu mnuFile 
End If 
End Sub 

Print - печать текста на форме. Свойство формы AutoRedraw установите в True.

Пример использования:

Me.Print "Поздравляю!" & vbCrLf & "Желаю всего наилучшего!" 

PSet - рисование точки указанного цвета в заданном месте. За толщину объекта отвечает свойство DrawWidth.

Синтаксис:

Объект.PSet [Step] (X, Y), [Цвет] 

Пример использования:

Me.DrawWidth = 10 
Me.PSet (100, 100), vbRed 

Refresh - производит обновление формы.

Scale - установка масштаба.

ScaleX - используется для преобразования значения высоты формы из одних единиц (установленных в ScaleMode) в другие.

ScaleY - используется для преобразования значения ширины формы из одних единиц (установленных в ScaleMode) в другие.

SetFocus - передает фокус форме. Форма может получить фокус, только если на ней нет элементов управления, либо они не видны или не доступны.

Show - загружает или показывает форму на экране, если не загружена в память, то метод позволяет загрузить ее.

TextHeight - возвращает высоту указанной строки.

Пример использования:

Label1 = Me.TextHeight("Поздравляю!" & vbCrLf & "Желаю всего наилучшего!") 

TextWidth - возвращает ширину указанной строки.

Пример использования:

Код:

Label1 = Label1 & Space(1) & Me.TextWidth("Поздравляю!" & vbCrLf & "Желаю всего наилучшего!") 

Рассмотрим основные события формы.

Давайте просмотрим все события для выбранного объекта, в нашем случае для формы, это очень легко сделать. В окне редактирования кода, сверху, видим 2 списка (Object и Procedure), в левом находятся объекты, которые в данный момент находятся на форме и собственно сама форма. Выберем в списке Object - Form, в правом автоматически откроется наиболее часто используемое событие для форм - Load. Полистав список Procedure можно увидеть все доступные события.


Рис 3. Список Object


Рис 4. Список Procedure

Для того чтобы отследить, как в системе возникают события, т.е. в какой очередности, рассмотрим пример. В этом примере, при возникновении события на форму, будет помещен соответствующий текст, который будет информировать, в каком же порядке возникают события. Первым возникает событие Initialize.

Option Explicit 

Private Sub Form_Activate() 
Print "Возникает событие Activate" 
End Sub 

Private Sub Form_GotFocus() 
Print "Возникает событие GotFocus" 
End Sub 

Private Sub Form_Load() 
Print "Возникает событие Load" 
End Sub 

Private Sub Form_Resize() 
Print "Возникает событие Resize" 
End Sub 

Рис 5. Результат выполнения программы

Activate - происходит, когда форма становится активной, т.е. получает фокус. Срабатывает лишь при переключении между формами проекта. Происходит каждый раз при активации формы.

Click - происходит по щелчку мыши, на свободном месте формы. Как правой, так и левой кнопки.

DblClick - происходит по двойному щелчку, правой и левой кнопки. Причем событие Click все же происходит.

Пример использования:

Private Sub Form_Click() 
Print "1" 
End Sub 

Private Sub Form_DblClick() 
Print "2" 
End Sub 

Deactivate - событие происходит, в том случае, когда форма перестает быть активной. Противоположно событию Activate. Возникает при потере фокуса. Срабатывает лишь при переключении между формами проекта.

DragDrop - происходит при завершении операции перетаскивания. В тот момент, когда элемент сбрасывается на форму.

Пример использования:

Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single) 
Print "Попытка переместить кнопку" 
End Sub 

Private Sub Form_Load() 
Command1.DragMode = 1 
End Sub 

DragOver - происходит, когда объект-источник находится над объектом-получателем, но кнопка еще не отпущена.

GotFocus - происходит при получении формой фокуса. По нажатию клавиши Tab или с помощью метода SetFocus.

Initialize - происходит при создании формы, причем происходит один раз. До загрузки формы, во время конфигурации.

KeyDown - происходит, когда форма имеет фокус и пользователь нажимает клавишу на клавиатуре.

KeyPress - происходит при нажатии и удерживании клавиши. Причем момент удержания происходит очень быстро, почти мгновенно. При помощи этого события можно получить код нажатой клавиши.

KeyUp - происходит, когда форма имеет фокус и пользователь отпускает клавишу на клавиатуре.

Load - загрузка формы в память, до ее появления на экране. Данное событие имеет только форма. Форма может быть выгружена и заново загружена в ходе выполнения приложения, сколько угодно раз. Следовательно, событие может возникать по желанию разработчика несколько раз.

Наверное, это самое используемое событие. Код события выполняется пока форма, еще не видна на экране.

Можно использовать для настройки поведения и внешнего вида формы.

Пример использования:

Центрирует форму на экране.

Private Sub Form_Load() 
Me.Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2 
End Sub 

LostFocus - происходит когда форма теряет фокус.

MouseDown - происходит во время нажатия кнопки мыши на форме.

MouseMove - происходит при перемещении указателя мыши над формой.

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

События MouseDown, MouseMove и MouseUp имеют одинаковые параметры:

Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) 
Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 
Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) 

Button - содержит номер клавиши мыши.

Константы:

Const vbLeftButton = 1 
Const vbMiddleButton = 4 
Const vbRightButton = 2 

Shift - содержит информацию о состоянии клавиш ALT, CTRL и SHIFT.

Константы:

Const vbAltMask = 4 
Const vbCtrlMask = 2 
Const vbShiftMask = 1 

X, Y - координаты указателя мыши, где произошло событие.

QueryUnload - происходит перед событием Unload, перед закрытием формы. Если при обработке события параметру Cancel присвоить значение True, то выгрузка формы будет отменена.

Параметр UnloadMode содержит значение, по какой причине происходит закрытие формы.

Константы параметра UnloadMode:

  • Const vbAppTaskManager = 3 - по нажатию Ctrl+Alt+Del
  • Const vbAppWindows = 2 - по завершению Windows
  • Const vbFormCode = 1 - в коде приложения вызвано событие Unload
  • Const vbFormControlMenu = 0 - по нажатию "Закрыть" в оконном меню, в заголовке формы.
  • Const vbFormMDIForm = 4 - по закрытию главной формы, закрывается дочерняя.

Пример использования:

Private Sub Form_QueryUnload _ 
    (Cancel As Integer, _ 
     UnloadMode As Integer) 
   If UnloadMode = vbFormControlMenu Then 
    Cancel = True 
   End If 
End Sub 

Resize - происходит при изменении размеров формы. Можно использовать для масштабирования элементов управления при изменении размера формы.

Пример использования:

Private Sub Form_Resize() 
Text1.Height = Form1.ScaleHeight 
Text1.Width = Form1.ScaleWidth 
End Sub 

Terminate - выполняется самым последним событием, после Unload. Данное событие имеет только форма.

Unload- выгрузка формы и удаление из памяти. Данное событие имеет только форма. С помощью параметра Cancel можно отменить удаление формы.

Пример использования:

Private Sub Form_Unload(Cancel As Integer) 
If MsgBox("Вы уверены, что хотите выйти?", vbYesNo, "Выход из программы") = vbYes Then 
    Unload Me 
    Set Form1 = Nothing 
Else 
    Cancel = 1 
End If 
End Sub 

Оглавление

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог