Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Один Вопросик / 7 сообщений из 7, страница 1 из 1
07.09.2007, 14:46
    #34784599
Alex_Ts
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один Вопросик
Как определить кол-во элементов выбранного
Базового класса , например, на Форме

Спасибо
...
Рейтинг: 0 / 0
07.09.2007, 14:59
    #34784665
MiklS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один Вопросик
nCol=0
FOR i=1 TO ThisForm.ControlCount
IF ThisForm.Controls(i).BaseClass="TextBox"
nCol=nCol+1
ENDIF
ENDFOR
...
Рейтинг: 0 / 0
07.09.2007, 15:17
    #34784755
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один Вопросик
В общем случае, довольно сложно. Приведенный MiklS пример не учитывает вложенных элементов. Например, внутри контейнеров или на страницах PageFrame. Т.е. в общем случае придется писать рекурсию.

Однако если нужно не считать объекты, а модифицировать некое их свойство, то это можно сделать через SetAll().

Также, если вообще все объекты формы сделаны на основе собственных классов, то через то же SetAll() можно заставить все объекты сообщать о себе необходимую информацию при помощи X_ACCESS() или X_ASSIGN() методов.
...
Рейтинг: 0 / 0
07.09.2007, 15:25
    #34784796
Alex_Ts
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один Вопросик
Благодарю, Уважаемые
...
Рейтинг: 0 / 0
07.09.2007, 15:34
    #34784833
MiklS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один Вопросик
Судя по по поучительному тону ВладимирМ - это Владимир Максимов. Ну сним спорить сложно.
Хотя Grid - тоже объект-котейнер (естественно в нем есть ещё Columnы), но сколько тогда текст боксов будет на форме? по этому я и привел самый простой пример. Ну а для любого контейнера придётся естественно поторить код. Но как достучаться до класса Control, если в нём тоже есть TextBox ы?
...
Рейтинг: 0 / 0
07.09.2007, 15:55
    #34784917
Alex_Ts
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один Вопросик
Думаю можно построить дерево из элементов
и его обойти

Спасибо
...
Рейтинг: 0 / 0
10.09.2007, 07:48
    #34787084
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один Вопросик
Alex_TsДумаю можно построить дерево из элементов
и его обойти

Спасибо Можно просто обойти все элементы формы рекурсивно. Примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
*Метод ThisForm.ResizeObject()
lpara toObj
* Изменение размеров и шрифта объектов формы
* Ориентируемся только по полностью развернотому окну программы
* Считаем, что разработка была под 800x600 со шрифтом  9 
local lnK,loC
if type('gnDefaultFontSize') = 'N'
	lnK = gnDefaultFontSize /  9 
else
	lnK = _screen.width /  800 
endif
if pemstatus(toObj, 'Top',  5 )
	with toObj
		.top = toObj.top * lnK
		.left = toObj.left * lnK
		.height = toObj.height * lnK
		.width = toObj.Width * lnK
	endwith
endif
if pemstatus(toObj, 'FontSize',  5 )
	toObj.FontSize = round(toObj.FontSize * lnK,  0 )
endif
do case
	case pemstatus(toObj, 'Controls',  5 )
		for each loC in toObj.Controls
			this.ResizeObject(loC)
		endfor
	case pemstatus(toObj, 'Pages',  5 )
		for each loC in toObj.pages
			this.ResizeObject(loC)
		endfor
	case pemstatus(toObj, 'Buttons',  5 )
		for each loC in toObj.Buttons
			this.ResizeObject(loC)
		endfor
endcase
Вызываешь ThisForm.ResizeObject(thisform) - далее все контейнеры на форме пройдутся рекурсивно.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Один Вопросик / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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