Примеры управления вложенными объектами в 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, а). Рис. 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). Рис. 10.20. Фрагмент вкладки Layout построителя сетки Пример 2. Демонстрируются 2 контейнера – OptionGroup и CommandGroup. Для этого создается форма GroupForm, содержащая группу переключателей и группу командных кнопок. Каждая группа включает по 3 объекта (рис. 10.21). Рис. 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) или в окне редактирования кода событий и методов формы. Рис. 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 устанавливают соответственно зеленый и синий фон. |