Многие приложения похожи тем, что используют для перемещения по таблице определенный набор кнопок. Обычно, этот набор включает в себя кнопки для перемещения указателя записи на следующую или предыдущую запись , а также на первую или последнюю запись в таблице.
Создание Кнопок Навигации
Каждая кнопка, в общем и целом, будет иметь одинаковые
характеристики и функциональное назначение , что является хорошей
предпосылкой для создания класса кнопки навигации. А индивидуальные
кнопки смогут легко получить эти общие характеристики, например внешний
вид, и функциональное назначение из класса. Этот родительский класс
является классом Navbutton,
который будет
определен ниже в этом разделе.
Как только родительский класс будет определен, следующие подклассы
определят функциональное назначение и специфический вид для
каждой из четырех кнопок навигации: navTop, navPrior, navNext, navBottom.
В конце будет создан класс контейнера - vcr,
и каждая
кнопка навигации будет добавлена к этому классу. Контейнер может быть
добавлен к форме или тулбару, чтобы обеспечивать навигацию по таблице.
Определение Класса NAVBUTTON
Для создания Navbutton
, сохраните следующие шесть определений классов (Navbutton
, navTop
, navBottom
, navPrior
, navNext
, и vcr
) в программном файле Navclass.prg.
Код | Комментарии |
---|---|
|
Определяет родительский класс для кнопок навигации. Задает некоторые значения для класса, включая пользовательское свойство
|
|
Если свойство TableAlias было установлено, то эта процедура родительского класса выберет алиаса прежде, чем будет выполнен код навигации подкласса. В противном случае считается, что пользователь сам хочет управлять навигацией по таблице в текущей выбранной рабочей области. |
|
Использование _SCREEN.ActiveForm.Refresh вместо THISFORM.Refresh позволит вам добавить класс к форме или тулбару без потери функциональности. |
|
Конец определения класса. |
Указанные кнопки навигации полностью основаны на классе Navbutton
. Следующий код определяет кнопку Top
из набора кнопок навигации. Остальные три кнопки навигации определены в
следующей таблице. Определения всех четырех классов аналогичны,
поэтому только первый из них имеет подробные комментарии.
Код | Комментарии |
---|---|
|
Определяет класс кнопки навигации Top и устанавливает свойство Caption. |
|
Создает код метода, который будет выполнен если произойдет событие Click для кнопки. |
|
Вызывает код события Click в родительском классе |
|
Конец процедуры Click. |
|
Конец определения класса. |
Другие кнопки навигации имеют похожее определение класса.
Код | Комментарии |
---|---|
|
Определяет класс кнопки навигации Next и устанавливает свойство Caption. |
|
Включает в себя код для установки указателя записи на следующую запись в таблице. Конец определения класса. |
|
Определяет класс кнопки навигации Prior и устанавливает свойство Caption. |
|
Включает в себя код для установки указателя записи на предыдущую запись в таблице. Конец определения класса. |
|
Определяет класс кнопки навигации Bottom и устанавливает свойство Caption. |
|
Включает в себя код для установки указателя записи на последнюю запись в таблице. Конец определения класса. |
Следующее определение класса содержит все четыре кнопки навигации так, что они могут быть добавлены как единое целое к форме. Класс также включает метод для установки свойства TableAlias кнопок.
Код | Комментарии |
---|---|
|
Начало определения класса. Свойству Height назначается тоже значение, что и значение высоты командных кнопок. |
|
Добавление кнопок навигации. |
|
Этот метод используется для установки свойства TableAlias кнопок. TableAlias определен в родительском классе
Однако, это может вызвать ошибку, если объект уже был добавлен к классу, у которого нет свойства TableAlias. |
|
Конец определения класса. |
Один раз определив класс, вы можете субклассировать его или добавлять на форму.
Создание Подкласса Основанного на Новом Классе
Также можно создать подкласс, основанный на базе vcr
, который имеет дополнительные кнопки, такие как Search, Edit, Save и Quit. Например, vcr2
содержит кнопку Quit:
Код | Комментарии |
---|---|
|
Определение класса, основанного на |
|
Когда пользователь нажмет |
|
Конец определения класса. |
Vcr2
наследует все от vcr
, плюс к этому имеет новую командную кнопку. При этом вам нет необходимости перезаписывать любой из существующих кодов vcr
.
Изменения в VCR Отражаются на Подклассе
Из-за наследования изменения, сделанные в родительском классе,
отражаются на всех подклассах, основанных на нем. Например, вы могли бы
позволить пользователю узнать, что низ таблицы был достигнут,
если измените оператор IF EOF( )
в событии navNext.Click
на следующий код:
Копировать код | |
---|---|
IF EOF( ) |
Вы могли бы позволить пользователю узнать, что верх таблицы был достигнут, если измените оператор IF BOF( )
в событии navNext.Click
на следующий код:
Копировать код | |
---|---|
IF BOF() |
Если эти изменения сделать в классах navNext
и navPrior
, то они автоматически будут применены и в соответствующих кнопках vcr
и vcr2.
Добавление VCR к Классу Формы
Однажды определив vcr
как элемент управления,
можно добавить этот элемент управления в контейнер в момент определения
самого контейнера. Например, следующий код, добавленный в Navclass.prg
определяет форму и добавляет к ней кнопки навигации:
Копировать код | |
---|---|
DEFINE CLASS NavForm AS Form |
Выполнение Формы, Содержащей VCR
Однажды определив подкласс формы, вы можете отобразить ее загрузив определение класса, создав объект основанный на подклассе и выполнив метод Show формы:
Копировать код | |
---|---|
SET PROCEDURE TO navclass ADDITIVE |
Если Вы не вызываете метод SetTable в oVCR ( VCR - объект в NavForm) когда пользователь нажимает кнопки навигации, то указатель записи перемещается в таблице, открытой в текущей выбранной рабочей области. Вы можете вызвать метод SetTable, чтобы определять по какой таблице перемещать указатель записи.
Копировать код | |
---|---|
frmTest.oVCR.SetTable("customer") |
Заметка |
---|
Когда пользователь закрывает форму, |
См. также
Ссылки
Свойство Caption (Visual FoxPro)Свойство Height
Метод SetAll