Объектная модель в Visual FoxPro делает возможным управлять свойствами формы в run time.

Ссылка на объекты в иерархии объектов

Для управления объектом в коде, вам необходимо идентифицировать его по отношению к иерархии контейнеров. На верхнем уровне контейнерной иерархии находится форма или набор форм, на которые вам необходимо ссылаться в объектной ссылке. Если вы не используете опцию NAME команды DO FORM объектная переменная имеет тоже самое имя, что и файл формы (.scx) file.

Для управления свойствами

  • В коде, ссылка переменной объекта, элемента управления и затем свойство используют точку, (.) в качестве разделителя в приведенном ниже формате:

    ObjectVariable.[Form.]Control.Property = Setting

В приведенной ниже таблице перечислены свойства и ключевые слова, которые позволяют вам легко ссылаться на объект в его иерархии.

 
Свойство или ключевое слово Ссылки

ActiveControl

Элемент управления в текущей активной форме, которые имеет фокус.

ActiveForm

Текущая активная форма.

ActivePage

Активная страница на текущей активной форме.

Parent

Непосредственный контейнер объекта

THIS

Объект, или процедура, или событие объекта.

THISFORM

Форма, которая содержит этот объект.

THISFORMSET

Набор форм, который содержит этот объект.

Например, для того, чтобы изменить заголовок командной кнопки на форме frmCust в наборе форм, хранящемся в Custview.scx, используйте приведенную ниже команду в программе или в командном окне:

 CopyCode imageСкопировать код
CustView.frmCust.cmdButton1.Caption = "Edit"

Используйте ключевые слова THIS, THISFORM и THISFORMSET для ссылки на объекты внутри формы. Например, для того, чтобы изменить заголовок командной кнопки, когда по ней производится щелчок, включите приведенную ниже команду в ее событие Click:

 CopyCode imageСкопировать код
THIS.Caption = "Edit"

Приведенная ниже таблица дает примеры использования THISFORMSET, THISFORM, THIS и Parent для установки свойств объекта:

 
Command Where to include the command

THISFORMSET.frm1.cmd1.Caption = 'OK'

В событии или методе любого элемента управления на любой форме в наборе форм, за исключением frm1.

THISFORM.cmd1.Caption = 'OK'

В событии или методе любого элемента управления за исключением cmd1 на той же самой форме, на которой помещен cmd1.

THIS.Caption = 'OK'

В событии или методе элемента управления, чей заголовок вы желаете изменить.

THIS.Parent.BackColor = RGB(192,0,0)

В событии или методе любого элемента управления на форме. Команда изменяет цвет фона формы в темно-красный.

Установка свойств в Run Time с помощью выражений

Вы можете, кроме того, установить свойства в run time с помощью выражений или функций.

Для установки свойств в выражения в run time

  1. Присвойте свойству выражение.

    - или -

  2. Присвойте свойству результат функции, определенной пользователем.

    Например, вы можете установить заголовок кнопки в Edit или Save, в зависимости от значения переменной. Задекларируйте переменную в вызывающей форму программе:

     CopyCode imageСкопировать код
    PUBLIC glEditing
    glEditing = .F.

    Затем используйте выражение IIF в установке Caption:

     CopyCode imageСкопировать код
    frsSet1.frmForm1.cmdButton1.Caption = ;   
       IIF(glEditing = .F., "Edit", "Save")

Вы можете определить размер кнопки с установить заголовок, используя выражения из полей таблицы:

 CopyCode imageСкопировать код
* установите ширину кнопки в длину 'Call ' + имя и фамилия
frmForm1.cmdButton1.Width = 5 + ;
   LEN(ALLTRIM(employee.first_name    + " " + employee.last_name)) 
* установите ширину кнопки в длину 'Call ' + имя и фамилия
frmForm1.cmdButton1.Caption = "Call " + ;
   ALLTRIM(employee.first_name + " " + employee.last_name)

Вы можете, кроме того, установить заголовок с помощью пользовательской функции:

 CopyCode imageСкопировать код
frsSet1.frmForm1.cmdButton1.Caption = setcaption()

Установка множества свойств

Вы можете установить сразу множество свойств.

Для установки множества свойств

  • Используйте командную структуру WITH ... ENDWITH Command.

    Например, для установки множества свойств колонки в элементе управления grid на форме, вы могли бы включить приведенное ниже предложение в любое событие или метод формы:

     CopyCode imageСкопировать код
    WITH THISFORM.grdGrid1.grcColumn1
       .Width = 5
       .Resizable = .F.
       .ForeColor = RGB(0,0,0)
       .BackColor = RGB(255,255,255)
       .SelectOnEntry = .T.
    ENDWITH

Вызов методов в Run Time

После создания объекта, вы можете вызывать методы этого объекта из любого места вашего приложения.

Для вызова метода объекта

  • Используйте следующий синтаксис:

    Parent.Object.Method

Например, приведенный ниже код вызывает методы для отображения формы и устанавливает фокус на командную кнопку:

 CopyCode imageСкопировать код
* Набор форм сохранен в файле MYF_SET.SCX
myf_set.frmForm1.Show
myf_set.frmForm1.cmdButton1.SetFocus

Чтобы спрятать форму, выдайте эту команду:

 CopyCode imageСкопировать код
myf_set.frmForm1.Hide

Смотрите также