Ввод данных с клавиатуры

Запись данных в оперативную память

Запись данных в оперативную память является одной из самых распространенных при составлении программ. Она встречается при установке свойств объектов в ходе работы программы и при записи данных по адресам, определенным пользователем. Эти операции осуществляются оператором присваивания. Учитывая, что данные записываются в свойства объектов, а также в качестве значений переменных, констант и элементов массива, можно предложить несколько форм оператора присваивания (табл. 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)