Ввод данных с клавиатуры
Запись данных в оперативную память
Запись данных в оперативную память является одной из самых распространенных при составлении программ. Она встречается при установке свойств объектов в ходе работы программы и при записи данных по адресам, определенным пользователем. Эти операции осуществляются оператором присваивания. Учитывая, что данные записываются в свойства объектов, а также в качестве значений переменных, констант и элементов массива, можно предложить несколько форм оператора присваивания (табл. 4.3).
Таблица 4.3
Форматы оператора присваивания
Выполняемая операция | Формат оператора присваивания и пример |
Установка свойства объекта | Имя_объекта.Имя_свойства = значение Пример: TB.Text = "Это содержимое свойства Text" |
Запись значения переменной из модуля | Имя_модуля.Имя_переменной = значение Пример: OpDan.A = 10*d |
Запись значения переменной, описан-ной внутри блока | Имя_переменной = значение Пример: Summ = 400 |
Запись значения в константу | Const Имя_константы = значение Пример: Const Pi = 3.14159 |
Запись значения в элемент массива | Имя_массива(список_индексов_элемента)=значение Примеры: A(10) = 25 : B(27, 15) = 257 |
Инициализация массива данных типа Variant (зависит от контекста) | Public (или private или dim Имя_массива . . . Имя_массива = array (значение_1, . . . значение_n) Пример: dim f : . . . : f = array (1,2,3,4,5) |
Запись данных в поля данных сложного типа | Имя_переменной.Имя_поля=значениеили With Имя_переменной .Имя_поля_1=значение_1 . . . End With Примеры: Stud.Name="Михаил" With Stud .Name = "Михаил" : .Fam = "Щеглов" End With |
Из табл. 4.3 видно, что в любом случае оператор присваивания состоит из правой и левой частей, разделенных символом "=". В левой части стоит символьный эквивалент адреса (т.е.) имя данного, в правой части – конкретное значение данного или вычисляемое выражение подходящего типа.
Важнейшей операцией, с которой приходится встречаться программисту, является ввод данных с клавиатуры. Для этой цели в среде Visual Basic существуют объекты Text Box, Flex Grid и InputBox.
Наиболее просто организовать ввод данных с клавиатуры посредством объекта Text Box (табл. 4.4).
Таблица 4.4
Организация ввода данных посредством объекта Text Box
Вид окна | Комментарий |
В простейшем варианте используются следующие свойства объекта: Name – регистрирует объект в программе, Text – хранит символы, вводимые с клавиатуры | |
В многострочном варианте приходится работать со свойствами: Name – регистрирует объект в программе, Text – хранит символы, вводимые с клавиатуры, MultyLine – разрешает наличие многострочного ввода, ScrollBars – управляет наличием полос прокрутки окна | |
При организации ввода пароля используются свойства: Name – регистрирует объект в программе, Text – хранит символы, вводимые с клавиатуры, PasswordChar – определяет символ, показываемый в окне |
В свойство MultyLine при проектировании окна ввода данных средой автоматически записывается значение False, запрещающее многострочность. Для создания многострочного окна в свойство MultyLine нужно записать значение True.
Свойства ScrollBars имеет четыре значения:
· 0 – нет полос прокрутки,
· 1 – есть горизонтальная полоса,
· 2 – есть вертикальная полоса,
· 3 – есть обе полосы.
При организации ввода данных через объект Text Box минимально приходится пользоваться свойствами Name (для регистрации объекта в программе) и Text, которое хранит комбинацию символов, введенных с клавиатуры Дополнительными средствами управления окном являются свойства: MultyLine, ScrollBars, PassWordChar, Font, Alignment, Visible, Enabled и др. (табл. 2.5) |
При вводе множества данных, которые можно оформить в виде таблицы, прекрасные результаты можно получить, используя объект Flex Grid. При решении этой задачи приходится решать три проблемы: управление внешним видом таблицы, ввод данных в ячейки и защиту данных в некоторых ячейках таблицы, например, в крайнем правом столбце или в нижней строке.
Существует два варианта организации ввода данных в таблицу: через вспомогательное окно Text Box и прямой ввод данных в ячейки таблицы
(табл. 4.5, кнопки 1 и 2 на рисунках в таблице можно игнорировать). В обоих случаях выбор ячейки для ввода данных осуществляется щелчком мыши и клавишами "стрелка влево", "стрелка вправо", "стрелка вверх", "стрелка вниз". Варианты текста фрагмента программы, управляющей объектом Flex Grid, приведены в табл. 4.5.
Таблица 4.5
Организация ввода данных через объект FlexGrid
Вид формы | Комментарий |
Sub MSFG1_KeyPress(KeyAscii As Integer) Dim i As Integer: Dim j As Integer Dim s As String: Dim s1 As String * 1 i = MSFG1.Row: j = MSFG1.Col s = MSFG1.TextMatrix(i, j) s1 = Chr(KeyAscii): s = s + s1 MSFG1.TextMatrix(i, j) = s End Sub | |
Private Sub MSFG2_GotFocus() TB.SetFocus End Sub Private Sub MSFG2_RowColChange() Dim i As Integer: Dim j As Integer i = MSFG2.Row: j = MSFG2.Col TB.Text = MSFG2.TextMatrix(i, j) TB.SetFocus End Sub Private Sub TB_Change() Dim i As Integer : Dim j As Integer i = MSFG2.Row: j = MSFG2.Col MSFG2.TextMatrix(i, j) = TB.Text End Sub |
Прямой ввод данных в клетку таблицы осуществлен в обработчике события KeyPress. Переменные i,j,s,s1 введены для придания тексту кода программы более компактного вида. Код введенного символа попадает через буфер клавиатуры в переменную KeyAscii. Далее этот код определяет букву, записываемую в переменную s1. Затем к содержимому активной ячейки приписывается буква, полученная из буфера клавиатуры. Недостатком приведенного фрагмента является неспособность обработать нажатие клавишей Enter, BackSpace и Del часто использующихся для редактирования данных. Усовершенствованный вариант кода приведен на рис. 4.3. Изменения выделены жирным шрифтом.
Private Sub MSFG1_KeyPress(KeyAscii As Integer)
Dim i As Integer: Dim j As Integer
Dim s As String: Dim s1 As String * 1
i = MSFG1.Row: j = MSFG1.Col
s = MSFG1.TextMatrix(i, j)
s1 = Chr(KeyAscii):
if s1=chr(13) then
'вставить операторы, обрабатывающие нажатие Enter
elseif s1=chr(8) then
'оператор, обрабатывающий нажатие BackSpace
'выполняет усечение строки s справа на 1 символ
s = left(s, len(s)-1)