Когда не нужно создавать процедур обработки события Click
Когда не нужно создавать процедур обработки события Click
Большинство элементов управления VBA распознают событие Click. Но, за исключением кнопок, обычно нет необходимости и даже неразумно создавать процедуру обработки события Click, даже если нужно, чтобы объект отвечал на щелчки кнопки мыши. Причина в том, что эти элементы управления отвечают на щелчки автоматически и обычно так, как требуется.
Предположим, вы поместили в форму VBA несколько кнопок. После запуска формы на выполнение щелчок на кнопке выделяет эту кнопку и для этого не требуется никакого программирования. Точно так же VBA автоматически обрабатывает щелчки на кнопках выключателей и переключателей. VBA знает, что щелчок должен изменить состояние элемента управления на противоположное, если для элемента управления предусмотрено только два состояния (состояние включен/выключен- для выключателя, отмечен/не отмечен- для флажка и т.д.). А после щелчка в поле текста этот элемент управления автоматически перемещает курсор ввода в то место, где вы щелкнули.
Но VBA не может передать информацию о состоянии элемента управления вашей программе- это придется делать вам, создавая программный кол. Что введет пользователь в поле текста? Какой флажок отметит и для какого снимет отметку? Какую из кнопок переключателей выберет? Ваша программа не узнает об этом до тех пор, пока вы не создадите программный код, позволяющий выяснить и обработать эту информацию.
Здесь нужно использовать свойство Value, в котором содержится информация о текущем состоянии элемента управления, если этот элемент управления может быть в разных состояниях или содержать данные. Вы можете заставить программу считывать значение свойства Value при каждом его изменении, если создадите процедуру обработки события Change. Можно также просто прочитать значение свойства Value после того, как форма будет скрыта с экрана. Подробнее об этом - в разделе, посвященном событию Change, и разделе "Основные приемы программирования форм".
Сама форма тоже имеет событие Click. На практике, конечно, большинство форм используется просто как подложка для размещения кнопок, текстовых полей и других элементов управления. Но при желании вся форма может играть роль одной большой кнопки, и тогда щелчок в любом ее месте будет инициировать выполнение чего-нибудь очень полезного в программе.
Для этого нужно поместить программный код соответствующих действий в процедуру обработки события Click формы:
Private Sub UserForm_Click( )
...(программный код, инициируемый событием)
End Sub
Обратите внимание на то, что имена всех процедур обработки событий формы начинаются с UserForm, независимо оттого, какое имя вы назначили самой форме. Если вы действительно собираетесь создавать процедуру обработки события Click формы, то должны четко представлять себе, что VBA выполнит эту процедуру после щелчка пользователя только в той части формы, которая не закрыта каким-нибудь элементом управления. Другие процедуры обработки событий, связанных с манипуляциями мышью, работают аналогично.
Для элементов управления типа полос прокрутки, кнопок прокрутки переключателей и выключателей главным событием является событие Change. Эти элементы управления реагируют на щелчки мыши и нажатия клавиш, но реагируют автоматически. VBA вместе с Windows делают всю "грязную" работу по изменению внешнего вида элемента управления и изменению его установок в соответствии с тем, какие клавиши или какие кнопки мыши были нажаты.
Возможно, вы захотите, чтобы программа отвечала не на сами нажатия, а на те изменения, к которым они привели. В таком случае вы должны создать программный код для события Change. Событие Change происходит, когда изменяется значение элемента управления (т.е. когда изменяется значение свойства Value). При этом не имеет значения, почему произошло изменение значения- после щелчка кнопки мыши или печатания либо потому, что какая-то процедура в программе в одном из своих операторов манипулировала значением свойства Value этого элемента управления.
Не исключено также, что вы захотите, чтобы программа отвечала на изменение значения некоторого элемента управления по окончании работы с ним пользователя. В таком случае нужно создать программный код для события After Update, которое возникает при передаче фокуса ввода другому элементу управления.
С помощью процедуры обработки события можно сделать гораздо больше, чем просто отобразить новое значение элемента управления. Например: проверить, удовлетворяет ли это значение заданным критериям; сначала выполнить вычисления, основанные на этом значении, а затем определенные действия, в зависимости от результатов вычисления; использовать значение элемента управления для того, чтобы установить другое значение, например для громкости звука динамика вашего компьютера.
Используйте события Keypress, KeyDown и KeyUp, чтобы отвечать на нажатия клавиш пользователем. Событие Keypress удобно использовать для распознавания клавиш с обычными "печатаемыми" символами (буквы, числа, знаки пунктуации), когда нужно обработать информацию, вводимую в текстовое поле или в поле со списком. С помощью этого события распознаются также многие из комбинаций типа <Ог1+клавиша>, а также клавиша <Backspace>. Немного позже я покажу, как проверить или изменить напечатанный символ с помощью процедуры обработки события KeyPress.
События KeyDown и KeyUp, напротив, распознают практически любую посылаемую им комбинацию клавиш, включая выкрутасы типа <Alt+Shift+CtrI+F9>. С этими событиями работать труднее, чем с KeyPress, но зато они позволяют использовать более широкий набор сочетаний клавиш. Например, можно создать процедуру обработки события KeyDown, которая позволяет с помощью комбинаций <Ctrl+<-> и <Ctrl+->> соответственно уменьшать или увеличивать значение полосы прокрутки, например, на 10.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Почему не нужно создавать системные вызовы
Почему не нужно создавать системные вызовы Новый системный вызов легко реализовать, тем не менее это необходимо делать только тогда, когда ничего другого не остается. Часто, для того чтобы обеспечить новый системный вызов, существуют более подходящие варианты. Давайте
Когда нужно использовать нижние половины
Когда нужно использовать нижние половины Часто не просто понять, зачем нужно откладывать работу и когда именно ее нужно откладывать. Вам необходимо ограничить количество работы, которая выполняется в обработчике прерывания, потому что обработчик прерывания
Понятие события и его обработки
Понятие события и его обработки Рассматривая примеры Web-сценариев, мы исходили из предположения, что они выполняются при загрузке Web-страницы. Как мы уже знаем из главы 14, Web- сценарий исполняется в том месте HTML-кода Web-страницы, в котором присутствует создающий его тег
Понятие события и его обработки
Понятие события и его обработки Рассматривая примеры Web-сценариев, мы исходили из предположения, что они выполняются при загрузке Web-страницы. Как мы уже знаем из главы 14, Web- сценарий исполняется в том месте HTML-кода Web-страницы, в котором присутствует создающий его тег
7.3 Когда не нужно посылать сообщение ICMP
7.3 Когда не нужно посылать сообщение ICMP Напомним, что ICMP-сообщение об ошибке посылается, когда в сети не все благополучно. Важно обеспечить, чтобы трафик ICMP не перегружал сети, делая ситуацию еще хуже. Для этого протокола, требуется ввести несколько очевидных ограничений.
2.7. Когда нужно создавать несколько сайтов?
2.7. Когда нужно создавать несколько сайтов? Для большинства компаний все коммуникации объединяются на одном сайте, их достаточно разнести по разным разделам, однако бывает так, что компании нужно несколько разных сайтов, иногда даже никак не связанных между собой.
Отличия процедур типа Function от процедур типа Sub
Отличия процедур типа Function от процедур типа Sub Между процедурами типа Function и типа Sub есть одно существенное отличие: в процедуре типа Function обязательно где-то должен присутствовать по крайней мере один оператор, задающий значение этой функции. При этом используется имя
Восстанавливать или создавать?
Восстанавливать или создавать? Понятие "восстановление базы данных" при ее перезаписывании родилось в годы, когда дисковое пространство было дороже, чем прием на работу эксперта по реконструкции разрушенной базы данных или формирование группы персонала по данным для
10. Когда открыть, а когда закрыть
10. Когда открыть, а когда закрыть Рассмотрев деловые модели, которые поддерживают разработку программного обеспечения с открытыми текстами, мы можем теперь приблизиться к общему вопросу о том, когда исходному коду, с точки зрения экономики, имеет смысл быть «открытым», а
Как создавать эффективный класс
Как создавать эффективный класс Рассмотрим вначале эффективные классы. Что нужно сделать для реализации АТД? Результирующий эффективный класс будет формироваться из элементов трех видов:[x]. (E1) Спецификации АТД (множество функций с соответствующими аксиомами и
Волк и Чёрная Шапочка: нужно ли спасать Науку, и если нужно, то как? Василий Щепетнёв
Волк и Чёрная Шапочка: нужно ли спасать Науку, и если нужно, то как? Василий Щепетнёв Опубликовано 06 октября 2013 Найдя на дне реки Москвы глиняный кувшин, запечатанный таинственной печатью, пионер Костыльков размечтался. Вот сдаст он сегодня этот
Automatic Click Remover
Automatic Click Remover Чтобы быстро удалить потрескивание и статику из виниловых записей, используйте Automatic Click Remover. Вы можете исправить сразу всю композицию разом или же точно выделить каждый щелчок и локально убрать его. Этот эффект обеспечивает такое же качество обработки как и
Click/Pop Eliminator (process)
Click/Pop Eliminator (process) Эффект Click/Pop Eliminator обнаруживает и удаляет щелчки и хлопки. Как и Automatic Click Remover, этот эффект идеально подходит если вы хотите очистить звук виниловых записей до их перевода на CD или другие цифровые носители. Однако Click/Pop Eliminator обеспечивает гораздо более
13-Я КОМНАТА: Think before click
13-Я КОМНАТА: Think before click Автор: Илья ЩуровЧеловеку свойственно воспринимать окружающую реальность в тех терминах и образах, к которым он привык и с которыми умеет работать. Любой процесс можно промоделировать любым другим процессом - на том или ином уровне абстракции,