Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Проект KeyList

Читайте также:
  1. FALLOUT TACTICS И проект Убежищ
  2. III. Етап проектування
  3. III. Составление проекта федерального бюджета и отчета о его исполнении
  4. III. Управление предметной областью проекта
  5. Pound; рассматривает проекты региональных стандартов аудиторской деятельности и иных нормативны
  6. Project Work 2. Робота над проектом. Впр. 1 (с. 136).
  7. Project Work 2. Робота над проектом. Впр. 2с (с. 180).

Приложение KeyList (рис. 5.4.4) предназначено для поддержки списка книг, индексированных по значению ISBN. Это приложение, конечно, примитивно и не соответствует требованиям, предъявляемым к базам данных. Для экономии места и времени информация хранится в массиве, а между сеансами сохраняется в файле на диске.

Рис.5.4.4. В приложении KeyList для поддержки индексированной информации используется элемент ListBox

Массив - удобная форма хранения нескольких сотен записей, но их сортировка - дело нелегкое. Вставка каждого пункта в соответствующий элемент массива требует копирования больших объемов данных. Чтобы вставить новый пункт в первый элемент массива, необходимо скопировать все пункты в следующую позицию массива. Поэтому следует, по возможности, избегать сортировки (особенно во время работы).

В приложении KeyList для поддержки отсортированных пунктов списка используется элемент ListBox В принципе, в этом элементе можно сохранить всю информацию (хотя это непрактично). Список следует использовать для хранения ключей, т е ISBN книг. Остальные поля можно сохранить в массиве.

 
 

На рис. 5.4.5 показан способ хранения ключей в элементе ListBox, а соответствующих данных - в массиве. Элементы массива ItemData указывают на соответствующие им элементы в массиве данных, который может содержать множество полей.

Рис. 5.4.5. Массив ItemData связывает пункты списка элемента ListBox с элементами массива DataArray или записями файла с произвольным доступом

Единственное, что теперь необходимо, - связать номера ISBN с соответствующей информацией в массиве. В элементе ListBox эта связь обеспечивается с помощью свойства ItemData, представляющего собой массив чисел по одному на каждый пункт списка. Каждый пункт списка имеет значение (отображаемое в списке), к которому можно обратиться с помощью свойства List, и связанное с ним значение, не отображаемое в списке List, но к нему можно получить доступ с помощью свойства ItemData.

Первым элементом в списке является List1.List(0), а связанная с ним информация хранится в четвертом элементе массива. Этот индекс предоставляется свойством List1.ItemData(0) Свойство Sorted списка равно True, поэтому пользователь увидит ключи отсортированными, что позволит ему легко найти любой пункт списка List. Программисту же нет необходимости заботиться о поддержании порядка среди элементов массива, поскок доступ к ним осуществляется с помощью ключей в списке List элемента ListBox. Поэтому можно считать, что массив также отсортирован.

Программа позволяет вводить данные в различные поля. По завершении работы пользователь должен щелкнуть на кнопке ОК для подтверждения изменений (на рис 5.4.4 эта кнопка не видна, поскольку она появляется только во время ввода пользователем новой записи). Новая запись добавляется к массиву DataArray(), объявленному таким образом:

Dim DataArray(999,3) As String

Элемент DataArray(i, 0) хранит ISBN книги, элемент DataArray(i, 1)-список издателей DataArray(i, 2)-список авторов книги, DataArray(i, 3)-названия книг. Параметр i является индексом, хранящимся в свойстве ItemData списка. Ниже приведен код, исполняемый при щелчке на кнопке ОК.

Фрагмент программы. Кнопка ОК

Private Sub OKButton_Click()

Key = Trim(txtISBN.Text)

If Key = "" Then

MsgBox "Key field must be non-mepty"

‘(Ключевое поле не может быть пустым)

Exit Sub

End If

 

position = Search(Trim(txtISBN.Text))

If position >=0 Then

reply = MsgBox("Key exists. Replace existing record?", vbYesNo)

‘(Ключ существует. Заменить существующую запись?)

If reply = vbYes Then

List1.RemoveItem position

Else

txtISBN.SetFocus

Exit Sub

End If

End If

 

ArrayIndex = ArrayIndex + 1

List1.AddItem Key

List1.ItemData(List1.NewIndex) = ArrayIndex

DataArray(ArrayIndex, 1) = txtPublisher.Text

DataArray(ArrayIndex, 2) = txtAuthor.Text

DataArray(ArrayIndex, 3) = txtTitle.Text

List1.ListIndex = List1.NewIndex

ShowRecord

ShowButtons

End Sub

 

Программа читает данные, введенные пользователем в различные поля, производит поиск в списке с помощью функции Search() и определяет, существует ли запись с таким ключом. Далее она вставляет ключ в элемент ListBox сохраняет остальные поля в массиве DataArray(). Поскольку свойство Sorted списка List равно True, введенный пункт автоматически вставляется в соответствующую позицию списка. Переменная ArrayIndex является глобальной и указывает на последний элемент массива. При добавлении каждого нового элемента значение переменной ArrayIndex увеличивается на 1. Значение свойства ArraIndex сохраняется в массиве ItemData в позиции, соответствующей новому добавленному элементу. Следующее выражение является индексом нового добавленного в список элемента:

List1.NewIndex

Оно используется в операторе для выборки элемента массива ItemData, соответствующего новому пункту списка.

List1.ItemData(List1.NewIndex) = ArrayIndex

Массив ItemData списка List содержит ключи массива данных, поэтому при наличии ключа ISBN можно легко осуществить выборку названия книги или ее авторов. Каждый раз при щелчке на пункте списка элемента ListBox программа извлекает свойство ItemData этого пункта и использует его в качестве индекса для доступа к полю названия книги в массиве DataArray(). Ниже представлен код, осуществляющий выборку полей записи при выборе нового пункта списка.

Фрагмент программы. Отображение записи

Private Sub List1_MouseUp(Button As Integer,_

Shift As Integer, X As Single, Y As Single)

ShowRecord

End Sub

 

Sub ShowRecord()

If List1.ListIndex < 0 Then

txtISBN.Text = ""

txtPublisher.Text = ""

txtAuthor.Text = ""

txtTitle.Text = ""

Exit Sub

End If

ItemIndex = List1.ItemData(List1.ListIndex)

txtISBN.Text = List1.List(List1.ListIndex)

txtPublisher.Text = DataArray(ItemIndex, 1)

txtAuthor.Text = DataArray(ItemIndex, 2)

txtTitle.Text = DataArray(ItemIndex, 3)

End Sub

Если в списке не был выбран ни один пункт, то программа очищает содержимое всех полей. При выборе пункта программа отображает поля записи в соответствующих текстовых полях, вызывая для этого подпрограмму ShowRecords(), которая скрывает кнопки ОК и Cancel, а затем отображает кнопки Delete и Add New. Это происходит после добавления пользователем новой записи и щелчка на кнопке ОК. Можно отказаться от ввода новой записи, щелкнув на пункте списка.


Дата добавления: 2015-10-26; просмотров: 117 | Нарушение авторских прав


Читайте в этой же книге: Понятие о стандартных элементах управления | Добавление элементов управления в форму | Отображение текста в полях типа Label | Ввод текста в текстовые поля (TextBox) | Кнопка (Элемент CommandButton) | Переключатель (элемент Option Button) | Список (Элемент ListBox) | Использование графики | Линии и контуры | Элементы управления файлами |
<== предыдущая страница | следующая страница ==>
Пример ListDemo| Рамка (элемент Frame)

mybiblioteka.su - 2015-2024 год. (0.011 сек.)