К сожалению, ни один элемент управления не создается со стандартным диапазоном значений.
Для того чтобы связать значение, выбранное с помощью полосы прокрутки или кнопок со стрелками, с другим элементом управления, таким как текстовое поле, вам придется немного попрограммировать. Чаще всего мы обойдемся добавлением всего одной строки кода. Приведенный ниже фрагмент кода передает значение, полученное с помощью полосы прокрутки sclWarpFactor подписи lblScroll Bar Readout, после щелчка на бегунке полосы прокрутки:
Private Sub sclWarpFactor_Click
lblScrollBarReadout.Caption = sclWarpFactor.Value
End Sub
Обратите внимание, что для организации немедленной обратной записи, код, отображающий выбранное значение с помощью другого элемента управления, должен быть включен в процедуру обработки события Click, как и было показано выше.
Риc. 19.11. Диалоговое окно, показанное на рис. 19.10, претерпело некоторые улучшения
Дополнительно о программировании форм
Программирование форм - это действительно высокое искусство. Очень сложно создать форму, которая будет вести себя так, как вы того ожидаете, не говоря уже о пользователе.
Сведения, изложенные в настоящей главе, должны помочь вам лучше и быстрее достичь поставленной цели.
Использование переменных для ссылок на формы
Хотя в программном коде можно ссылаться на форму непосредственно по ее имени, не исключено, что вы предпочтете использовать для этого переменную. Например, чтобы уменьшить объем необходимого печатания, когда у формы длинное имя, или чтобы ускорить выполнение программы, когда в ней приходится отображать формы из разных проектов.
Поскольку формы являются объектами, к ним применима техника работы с объектами, рассмотренная в главе 10. Следующая процедура иллюстрирует процесс. Обратите внимание, что переменная должна объявляться как конкретная форма, а не как родовой объект User Form:
Sub FormVariableDemo()
Dim frml As FormAnOpinion
Set frml = FormAnOpinion
' Изменение свойств и вызов методов с помощью переменной:
With frml
.Caption = "Все указанное выше"
. Show
End With
End Sub
Строго говоря, оператор Set создает отдельную копию, или экземпляр, формы, присваивая его заданной вами переменной. Таким образом можно отображать несколько копий одной и той же формы, каждая из которых будет со своими собственными значениями в элементах управления. Для создания дополнительных экземпляров формы нужно использовать ключевое слово New. Вот как это выглядит:
' объявление переменных для форм
Dim frmOne As MultiForm
Dim frmTwo As MultiForm
' заполнение каждой переменной своим экземпляром формы
Set frmOne = MultiForm
Set frmTwo = New MultiForm ' Здесь используется New
' отображение двух экземпляров форм
frmOne . Show
frmTwo.Show
Распознавание нажатий клавиш
Используйте события KeyPress, KeyDown и KeyUp, чтобы отвечать на нажатия клавиш пользователем. Событие KeyPress удобно использовать для распознавания клавиш с обычными "печатаемыми" символами (буквы, числа, знаки пунктуации), когда нужно обработать информацию, вводимую в текстовое поле или в поле со списком. С помощью этого события распознаются также многие из комбинаций типа
События KeyDown и KeyUp, напротив, распознают практически любую посылаемую им комбинацию клавиш, включая выкрутасы типа
В главе 10 мы обсудили основные приемы, позволяющие убедиться в том, что пользователь ввел в форму правильные сведения. Здесь мы обсудим еще несколько приемов.
В случае текстовых полей и полей со списком некоторые символы для вводимых данных не допускаются. Используйте процедуру обработки события KeyPress, чтобы убрать с экрана недопустимые символы в случае печатания их пользователем. Следующий программный код позволяет вводить только буквы и цифры:
Private Sub txtSerial Number_KeyPress(ByVal KeyAscii _
As MSForms.ReturnInteger)
' весь следующий блок является условием:
If Chr(KeyAscii) < "0" Or _
(Chr(KeyAscii) > "9" And Chr(KeyAscii) < "A") Or _
(Chr(KeyAscii) > "Z" And Chr(KeyAscii) < "a") Or _
Chr(KeyAscii) > "z" Then
MsgBox "Недопустимый символ!"
KeyAscii = 0 ' отбрасывание символа