Распечатать страницу

Примеры управления вложенными объектами в Visual FoxPro

« Назад

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

ThisFormSet.Form1.PageFrame.Page1.Grid.Column1.ColumnProperty = someValue

Для перехода с некоторого уровня иерархии на более высокий можно употребить свойство Parent. Например, строка кода

? This.Parent.Name

размещенная в обработчике события Click переключателя Opt1, выведет имя группы переключателей – контейнера, содержащего Opt1.

Пример 1. В форме d:\GridForm.scx создается сетка Grid1, источником данных которой является таблица TableForGrid, содержащая два поля: числовое целочисленное и логическое. Столбцы сетки, отображающие эти поля, содержат элементы управления Spinner и CheckBox соответственно для числового и логического полей.

Добавим в форму одну сетку (рис. 10.19, а).

163.1.-Сетка-с-элементами-управления-Spinner-и-CheckBox-в-столбцах-формы

Рис. 10.19. Сетка с элементами управления Spinner и CheckBox в столбцах формы:

а – до запуска формы; б – после запуска формы и редактирования

В обработчике события Load формы запишем код создания таблицы TableForGrid и добавления в нее 4-х записей.

&& Обработчик события Load формы GridForm

&&

create table d:\TableForGrid (nField I, lField L)

&&

flag = .F.

for ind = 1 to 4

flag = not flag

insert into TableForGrid values(ind, flag)

next

В обработчике события Init формы добавим в каждый столбец сетки соответствующий объект и определим свойства сетки и столбцов добавленных объектов.

&& Обработчик события Init формы GridForm

&&

with ThisForm.Grid1

.RecordSource = "TableForGrid"    && Источник данных сетки

.ColumnCount = 2

&& Отказываемся от горизонтальной полосы прокрутки

.ScrollBars = 2

endwith

&&

&& Добавляем в столбец Column1 сетки объект Spinner (счетчик) с именем Spinner1

&& и задаем значения свойств столбца и добавленного объекта

with ThisForm.Grid1.Column1

.AddObject("Spinner1", "Spinner")

.CurrentControl = "Spinner1"         && Текущий элемент управления

.Spinner1.Visible = .T.        && Видимость

.Sparse = .F.                       && Отображаем счетчик в каждой строке

&& Источник данных столбца

.ControlSource = "TableForGrid.NField"

endWith

&&

&& Добавляем в столбец Column1 сетки объект CheckBox (флажок)

&& с именем CheckBox1

with ThisForm.Grid1.Column2

.AddObject("CheckBox1", "CheckBox")

.CurrentControl = "CheckBox1"

.CheckBox1.Caption = ""   && Без заголовка

.CheckBox1.Visible = .T.

.Sparse = .F.                       && Показываем флажок в каждой строке

.ControlSource = 'TableForGrid.LField'

endWith

Результат после запуска формы и произвольных изменений в сетке приведен на рис. 10.19, б.

Замечание. Указать вид текущего элемента управления можно также и в поле Control type вкладки Layout построителя сетки (рис. 10.20).

163.2.-Фрагмент-вкладки-Layout-построителя-сетки

Рис. 10.20. Фрагмент вкладки Layout построителя сетки

Пример 2. Демонстрируются 2 контейнера – OptionGroup и CommandGroup. Для этого создается форма GroupForm, содержащая группу переключателей и группу командных кнопок. Каждая группа включает по 3 объекта (рис. 10.21).

163.3.-Форма-с-двумя-контейнерами-OptionGroup-и-CommandGroup

Рис. 10.21. Форма с двумя контейнерами - OptionGroup и CommandGroup

При выборе переключателя изменяется цвет фона группы переключателей. При нажатии на командную кнопку выбирается соответствующий переключатель.

При формировании контейнеров в окне свойств изменены значение свойства ButtonCount  (установлено равным 3) и значение свойства Caption каждого элемента контейнеров.

Выбор переключателя П1 и сброс остальных при нажатии на кнопку К1 обеспечат следующие строки кода обработчика события Click кнопки:

&& В форме сохранены получаемые по умолчанию имена объектов

ThisForm.OptionGroup1.Option1.Value = 1

ThisForm.OptionGroup1.Option2.Value = 0

ThisForm.OptionGroup1.Option3.Value = 0

Поскольку аналогичный код должен присутствовать в обработчиках события Click кнопок П2 и П3, то целесообразно добавить в форму новый метод (команда меню Form – New Method), например SetOptionsValues, принимающий 3 параметра – значения свойства Value переключателей, и вызывать его из названных обработчиков.

Добавленный метод можно найти в списке методов окна свойств (рис. 10.22) или в окне редактирования кода событий и методов формы.

163.4.-Имя-пользовательского-метода-SetOptionsValues-в-окне-свойств

Рис. 10.22. Имя пользовательского метода SetOptionsValues в окне свойств

Двойной щелчок мышью по строке с именем метода позволит перейти к созданию или редактированию его кода.

Код обработчика события Click кнопки К1 будет таким:

ThisForm.SetOptionsValues(1, 0, 0)

Код других обработчиков отличается от приведенного только значениями параметров, равными 0, 1, 0 для К2 и 0, 0, 1 для К3.

Текст добавленного метода может быть следующим:

parameters v1, v2, v3

with ThisForm.OptionGroup1

.Option1.Value = v1

.Option2.Value = v2

.Option3.Value = v3

endWith

Можно обойтись и одним параметром – названием кнопки. Тогда обработчики кнопок К1, К2 и К3 будут содержать одинаковый однострочный код:

ThisForm.SetOptionsValues(This.Caption)

А в методе SetOptionsValues, принимающем 1 параметр, окажутся 3 оператора:

parameters k123                 && Параметр равен К1, К2 или К3

buttonNumber = Val(Right(k123, 1))

ThisForm.OptionGroup1.Value = buttonNumber

Для изменения цвета фона группы переключателей в обработчик события Click переключателя П1 поместим следующую строку кода:

This.Parent.BackColor = RGB(255, 0, 0) && Красный фон группы переключателей

Обработчики события Click переключателей П2 и П3 устанавливают соответственно зеленый и синий фон.