Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Перебор объектов!!! / 8 сообщений из 8, страница 1 из 1
10.02.2007, 10:14
    #34320953
MAJIbIIII
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор объектов!!!
Народ я знаю, что можно перебирать все формы такими инструкциями:
[src]for i=1 to thisformset.formcount
messagebox(thisformset.forms(i).name)

Внимание вопрос: можно ли перебрать на формочке все текстовые поля (ComboBox, TextBox и т.д.) ???
...
Рейтинг: 0 / 0
10.02.2007, 11:52
    #34320984
kdanylo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор объектов!!!
VFP 9.0

Код: plaintext
1.
2.
3.
4.
5.
FOR lni = 1  TO thisform.Objects.count
?thisform.Objects[lni].class
?thisform.Objects[lni].name
ENDFOR 

...
Рейтинг: 0 / 0
10.02.2007, 14:49
    #34321108
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор объектов!!!
MAJIbIIIIможно ли перебрать на формочке все текстовые поля (ComboBox, TextBox и т.д.) ???
Можно, но больно "муторно".

То, что привел kdanylo предполагает, что все объекты лежат непосредственно на форме. Нет PageFrame, Container, Control. Т.е. нет объектов-контейнеров, внутрь которых могли бы быть вложены искомые объекты.

Разумеется, это можно обойти через рекурсии. И так делают.

Но, если Вы укажете зачем Вам это надо, то, возможно, вполне достаточно окажется метода Object.SetAll(). Этот метод устанавливает нужное значение указанного свойства указанного класса объектов вне зависимости от их вложенности.
...
Рейтинг: 0 / 0
11.02.2007, 18:39
    #34322090
MAJIbIIII
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор объектов!!!
kdanyloVFP 9.0

Код: plaintext
1.
2.
3.
4.
5.
FOR lni = 1  TO thisform.Objects.count
?thisform.Objects[lni].class
?thisform.Objects[lni].name
ENDFOR 



Спасибо, вполне подходит

ВладимирММожно, но больно "муторно".

Не имеет значение.
Object.SetAll() - не совсем подходит: у меня имя объектов следующего формата: <имя>_replace, <имя>_insert, и если вторая часть имени - replace, это обозначает, что значение надо вставить не только в текущую таблицу, но все равно спасибо!!!
...
Рейтинг: 0 / 0
12.02.2007, 11:41
    #34323128
MAJIbIIII
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор объектов!!!
Не получилось народ!!! Обрисую полную картинку:
У меня набор форм (FormSet), есть формочка (ShowWindow=2), на которой имена текстовых полей и комбо (ComboBox) в таком виде:
<имя таблицы>_<имя поля> (не спрашивайте почему, просто мне так удобнее).
Мне надо перебрать все объекты в настоящей форме, для всех техстовых полей (заданы с помощью: Define Class TextBox_ as TEXTBOX) и комбов (ComboBox, заданы с помощью Define Class ComboBox_ as COMBOBox) выполнить следующие действия:
Replace <имя поля (берется из имени объекта путем отсеивания первого элемента имени до знака "_"> WITH <имя таблицы>_<имя поля>.VALUE (THIS.VALUE) (для комбо - IIF(THIS.VALUE="",THIS.DISPLAYVALUE,THIS.VALUE)) IN <имя таблицы (формируется путем вычеркивания из названия объекта второй части имени после знака "_">


Во блин че придумал. Помогите плизззз :(

P.S. Прошлый пример выдает следующие ошибки:
THISFORM can only be used within a method.
Object <имя формы> is not found.
...
Рейтинг: 0 / 0
12.02.2007, 17:40
    #34324797
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор объектов!!!
Сообщение об ошибке надо понимать БУКВАЛЬНО! Там же ясно написано, что ключевое слово ThisForm можно использовать только внутри методов формы или объектов, находящихся на форме.

ГДЕ Вы пытаетесь выполнить этот код? Если в процедуре, то в качестве параметра необходимо передать в процедуру ссылку на форму. Эту самую ThisForm.
...
Рейтинг: 0 / 0
12.02.2007, 18:32
    #34324982
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор объектов!!!
ну если так хочется перебрать, то
делайте красиво

Код: plaintext
1.
2.
3.
4.
local loControl
for each loControl in thisform.controls
    ? loControl. ....
endfor

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

ну вот и делайте классу метод, именно классу, пусть
класс сам делает себе что-то
и проверяйте в переборе именно наличие этого метода


Код: plaintext
1.
2.
3.
if pemstatus(loControl,'MyMethod', 5 )
   loControl.MyMethod(....)
endif
это будет более логичным, и смотреть имя объекта не понадобится

класс Вы можете пронаследовать некоторое количество раз
и каждый уровень наделить нужными методами, свойствами и признаками
...
Рейтинг: 0 / 0
12.02.2007, 19:37
    #34325171
ВладимирГ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор объектов!!!
Мне нравится использовать для таких задач клас от Collection.

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

Обьекты сами себя регистрируют в коллекцию при своей инициализации
А дальше управлять этим хозяйством трудностей не представляет.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Перебор объектов!!! / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]