52953.fb2 VBA для чайников - читать онлайн бесплатно полную версию книги . Страница 61

VBA для чайников - читать онлайн бесплатно полную версию книги . Страница 61

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

Таким образом, для программиста надписи важны, так как они позволяют создавать сообщения для общения с пользователями. Обычно элементы используются для идентификации элементов управления и их функций. Подобный пример приведен на рис. 10.13. Это особенно полезно для элементов управления без подписей, таких как полоса прокрутки или счетчики.

Рис. 10.13. Элементы управления заголовками в верхней части данной формы устанавливают функцию для каждой полосы прокрутки

Элемент может выглядеть как стандартное текстовое поле и не позволяет пользователю копировать содержащийся в нем текст. Установите свойство элемента управления заголовками Special Effect равным 2 (для sunken) и свойство BackColor - белый.

Ввод элементов управления текстом

Элементы управления отображают текст, который называется заголовком. Для того чтобы разместить свой собственный текст на элементе управления, измените текст в свойстве Caption в окне Properties (Свойства). Также можно изменить текст прямо в элементе управления, для чего дважды щелкните на нем. После этого рядом с текстом появится курсор. Для того чтобы перейти на новую строку, воспользуйтесь комбинацией клавиш <Shift+Enter>.

Элементы управления могут автоматически настраивать себя, изменяя содержащийся в них текст. Для этого необходимо изменить параметры в окне Properties (Свойства). На рис. 10.14 показан пример работы этих свойств. Например, можно выполнить следующее.

* Оставьте значение свойства Wordwrap равным True (no умолчанию), если вы хотите, чтобы VBA автоматически разделял текст на отдельные строки и размешал их в пустом пространстве, как это делает любой текстовый процессор. Если вы установите значение свойства Wordwrap равным False, все заголовки текста останутся в одной строке.

* Установите значение свойства AutoSize равным True, если вы хотите, чтобы разf мер элемента управления изменялся автоматически. Если значение свойства WordWrap будет также равно True, элементы управления размещаются вертикально. Если изменить значение свойства Wordwrap на False, элементы управления увеличатся таким образом, что займут одну строку.

* Используйте свойство Text Align для того, чтобы контролировать, каким образом текст располагается внутри элемента - слева, в центре или справа.

Рис. 10.14. Элементы управления, содержащиеся в данной форме, демонстрируют различные параметры свойств WordWrap И AutoSize

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

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

Ниже показано, как это сделать:

LbllnspirationalMessage.Caption = "Laugh and be happy!"

Для того чтобы в элементе управления текстом сделать обрыв строки, используйте строковый литерал, связанный с символом возврата каретки в операторе присвоения. (Более подробная информация об объединении текста содержится в главе 11.)

Сбор информации с помощью текстовых полей

Когда необходимо собрать информацию о пользователе, используется текстовое поле.

Ваш код может извлекать все, что пользователь введет в данное текстовое поле. На рис. 10.15 показано подобное текстовое поле.

Рис. 10.15. Большое белое поле в центре данной формы является текстовым полем, в котором ктото ввел сообщение

Если вы попытаетесь создать диалоговое окно со всего одним текстовым полем для ввода информации о пользователе, вероятнее всего, вам не нужна вся форма. Вместо этого можно воспользоваться функцией Input Box (подробнее о ней я расскажу в главе 11). Элементы управления текстовым полем можно использовать вместо функции Input Box в следующих случаях.

* Вам необходимо сделать красивое или отвратительное диалоговое окно. В этом случае функцию Input Box использовать нельзя.

* Вам необходимо, чтобы в одном диалоговом окне, кроме текстового поля, находился еще один элемент управления.

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

Используя текстовое поле, можно сделать программу с процедурой обработки событий, которая будет выполняться всякий раз, как пользователь нажмет любую клавишу на клавиатуре. При этом проверяется, соответствует ли нажатая клавиша установленным вами критериям. Используя функцию Input Box, вы можете только проверять содержимое и только после того, как пользователь закроет текстовое поле.

В текстовом поле можно разместить стандартный текст. При этом пользователю не придется вводить данные в текстовом поле, если содержащаяся в нем информация подходит для него. Для того чтобы ввести в текстовое поле стандартный текст, щелкните один раз в текстовом поле, выделив его, После этого повторно (но не два раза) щелкните в текстовом поле для того, чтобы перейти в режим ввода текста. Затем вводите текст. Также можно ввести текст в поле свойств Value в окне Properties Value (Свойства). (Запомните: текстовые поля не имеют заголовков.)

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

Для того чтобы обсудить использование свойства Value (или Text) на примерах, ознакомьтесь с разделами "Извлечение информации, введенной пользователем" и "Использование стандартных свойств элемента управления" ниже в настоящей главе.

Извлечение информации, введенной пользователем

Для того чтобы выяснить, какой текст ввел пользователь в текстовом поле, программа должна извлекать свойства Value или Text. Обычно вы должны назначить свойства для строковой переменной с оператором, как показано ниже:

strText BoxText = txtMessageFromUser.Value

После запуска программы переменная strText BoxText теперь содержит любой тип пользователя в текстовом поле, которое называется xt MessageFromUser.

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

Многие элементы управления обладают стандартными свойствами, к которым относится свойство Value.

В случае текстового поля вы не должны явно указывать, какое свойство используется - Value или Text - для настройки и извлечения содержимого текстового поля в коде VBA.

Поскольку свойство Value является стандартным свойством текстового поля, можно его пропустить. Следующая инструкция размещает сообщение в текстовом поле:

txtRUListening = "Do as I say!"

В данном примере в текстовом поле размешается текст, который пользователь ввел в строковой переменной:

strWhatHeard = txtSoundOffTextBox

Создание автоматически изменяющихся текстовых полей

Текстовые поля имеют те же свойства AutoSize, Wordwrap и Text Align, что и элементы управления. Работают они почти так же. Более подробная информация об этих свойствах содержится в разделе "Отправка сообщений с надписями" раньше в настоящей главе. Однако свойство Wordwrap работает только в текстовых полях, состоящих из нескольких строк, о чем я расскажу в главе 19, "Еще о VBA-формах".

Использование кнопок

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

Стандартная кнопка представляет собой серый объект, на котором находится поясняющий текст, например OK, Cancel или Guess Again, Friend. Если простой текст оскорбляет ваш изысканный вкус, на кнопку можно поместить небольшое изображение. Для того чтобы сделать это, в окне Properties (Свойства) в поле свойства Picture щелкните на небольшой кнопке, на которой изображены три точки. Вы получите доступ к диалоговому окну, которое позволит указать файл с рисунком. На рис. 10.16 показаны различные кнопки.

Рис. 10.16. Кнопки могут быть различного размера, формы и формата. На двух кнопках, расположенных в нижнем левом углу, вместо текста находятся рисунки

К сожалению, кнопки ничего не будут делать, если о них ничего не сказано в программе. Щелчком на кнопке вызывается событие Click, однако вы должны написать код для того, чтобы сказать VBA, какое действие должно произойти, когда происходит событие.

Выбор стандартных кнопок

В основной части диалоговых окон нажатие клавиши <Enter> приводит к нажатию кнопки. Эта кнопка является стандартной кнопкой, так как именно она реагирует на нажатие клавиши <Enter>, за исключением случая, когда фокус переместился на другой элемент управления.

Для того чтобы назначить кнопку стандартной кнопкой в форме, установите значение свойства Default равным True. Конечно, в форме может быть только одна стандартная кнопка.

Если диалоговое окно позволяет изменить данные или параметры настройки, неплохо было бы предоставить пользователю возможность отмены внесенных изменений. По договоренности, кнопка, предназначенная для отмены сделанных изменения, называется Cancel (Отменить). Если вы не придерживаетесь принятых обозначений, можно назвать эту кнопку 'Never mind" или "Forget it". Независимо от того, что именно написано на данной кнопке, она предназначена для отмены предыдущих операций.

Также по договоренности, после нажатия клавиши <Esc> любое диалоговое окно закрывается, как будто пользователь щелкнул на кнопке, на которой написано Cancel (Отменить) (или что-либо другое). Если свойство кнопки Cancel равно True, это означает, что после нажатия клавиши <Esc> программа будет вести себя так, как будто вы щелкнули на кнопке Cancel (Отменить).

Если свойство Cancel равно True, это автоматически не означает, что после щелчка на кнопке диалоговое окно будет закрыто. Это связывает клавишу <Esc> с событием кнопки Click.

Рамка - это очень важный элемент форм VBA и представляет собой простой прямоугольник с заголовком в верхней части. В рамке можно разместить другие элементы управления.

Рамки служит для следующих двух целей.

* Для визуального выделения группы связанных элементов управления. Это помогает понять пользователю, что эти элементы управления связаны. Также рамки позволяют разделить большие формы на несколько участков (рис. 10.17).

* Для выделения группы кнопок, из которых пользователь должен выбрать только одну.

Рис. 10.17. В данной форме используется три различные рамки для упорядочения групп кнопок