02.02.2005, 11:26 | #1 |
Участник
|
можно ли получить массив элементов управления на форме?
Собственно, subj. Т.е. возможно ли получить содержимое всех элементов управления, расположенных на форме (поля, кнопки и т.п.).
|
|
02.02.2005, 12:14 | #2 |
NavAx
|
Если Вы хотите в коде динамически править свойства контролов, то контролам надо давать имена, после чего их видно в C/AL Symbol Menu.
Если откуда-то "слева" хотите получить список контролов произвольной формы - имхо нельзя. |
|
02.02.2005, 12:30 | #3 |
Участник
|
Цитата:
Изначально опубликовано Yoil
Если Вы хотите в коде динамически править свойства контролов, то контролам надо давать имена, после чего их видно в C/AL Symbol Menu. |
|
02.02.2005, 12:36 | #4 |
NavAx
|
Ограничен.
|
|
02.02.2005, 12:40 | #5 |
Участник
|
Обидно. Можно было бы добавить Caption к этому списку, иногда может понадобиться.
|
|
02.02.2005, 13:03 | #6 |
NavAx
|
Если сильно-сильно понадобится, то Caption можно менять через CodeUnit1, функция DimCaptionClassTranslate.
|
|
02.02.2005, 14:38 | #7 |
Участник
|
Действительно, нужно получить список контролов в форме. Но не "слева", а из кода в самой форме. Просто хотелось бы, чтобы этот код был универсальным для всех форм, в которых используется. Надеялся на тип GUID...
Подозреваю, что эта задача сродни получению конролов "слева" и не может быть решена в Навижн. Жаль. |
|
02.02.2005, 14:57 | #8 |
NavAx
|
К сожалению, подобная задача решается только (хотя мб и есть способ, известный лишь Посвященным ) для таблиц (с помощью виртуальной таблицы Field можно получить список всех полей таблицы, их типы etc).
|
|
03.02.2005, 14:47 | #9 |
Участник
|
Оказывается можно и получить список контролов, и менять любые свойства динамически не указанные в Symbol Menu.
http://forum.mazzy.ru/index.php?showtopic=2278 |
|
03.02.2005, 15:05 | #10 |
NavAx
|
Теоретически, оказывается, действительно можно
Осталось сделать это практически. |
|
04.02.2005, 13:11 | #11 |
Участник
|
Тема действительно получила неожиданное продолжение! Копаться в Blob, конечно, весьма занимательно - но очень медленно
Вопрос из той же серии: а нельзя ли обратиться к элементу управления по ссылке? |
|
04.02.2005, 13:22 | #12 |
Участник
|
Можно. Если вы читали форум Мазуркина Сергея, там написано - надо присвоить контролу имя и он будет доступен в списке контролов формы.
|
|
04.02.2005, 17:47 | #13 |
Участник
|
занятно. и как же? например, я хочу, чтобы ссылка на кнопку лежала в переменной. И менять, напрмер, свойство Enabled или Caption в этой кнопке посредством переменной... я почему-то считал, что это невозможно, но буду рад если ошибусь
|
|
07.02.2005, 10:03 | #14 |
Участник
|
Для начала присвойте имя кнопке вместо <Control12345>. Из полезных доступных свойств только Visible и Enabled.
|
|
07.02.2005, 10:23 | #15 |
NavAx
|
Цитата:
Изначально опубликовано Alexsky
занятно. и как же? например, я хочу, чтобы ссылка на кнопку лежала в переменной. И менять, напрмер, свойство Enabled или Caption в этой кнопке посредством переменной... я почему-то считал, что это невозможно, но буду рад если ошибусь После этого в Symbol Menu ткнитесь в CurrForm -> Controls - [YourButtonName] Увидите доступные свойства. |
|
07.02.2005, 10:41 | #16 |
Участник
|
Возможно я не понятно объяснил... Мне нужно динамически, т.е. в runtime работать с элементами управления. Т.е. не хотелось бы писать в коде каждого элемента CurrForm.Name1.Caption := 'lala', в коде другого CurrForm.Name2.Caption := 'tutu' и т.п.
А что-то вроде CurrForm.(преремнная1).Caption := (имя переменной, содержащей значение). И задавать значение переменной1 где-то в коде. |
|
07.02.2005, 10:57 | #17 |
NavAx
|
Нельзя.
|
|
07.02.2005, 11:12 | #18 |
Участник
|
Теоретически, можно. См. выше, объект 2000000001. Там и данные кодеюнитов содержатся.
|
|
07.02.2005, 13:17 | #19 |
NavAx
|
Цитата:
Изначально опубликовано Шрэк
Теоретически, можно. См. выше, объект 2000000001. Там и данные кодеюнитов содержаться. Да, покопавшись в бинарнике, можно изменить свойства контролов, недоступные из C/SIDE. Но изменения этих свойств будут заметны только после того, как Вы переоткроете объект. Т.е. если откроете, скажем, форму, на которой нарисована умная кнопка, которая выгрузит бинарник, изменить в нем Caption другой кнопки и загрузит бинарник обратно и нажмете эту самую кнопку, то, подозреваю, наблюдать изменение Caption Вы сможете только после того, как закроете форму и откроете еще раз. Для примера воспользуемся уже готовым алгоритмом действий, который привел Сергей в своей работе. Объявим в форме текстовую переменную длиной 100, нарисуем на форме кнопку, которая выдает MESSAGE(FORMAT(MAXSTRLEN(str))); Сейчас по нажатию будет выдаваться "100". Оставляем форму открытой. Открываем Codeunit Workshop, экспортируем объект нашей формы, изменяем в нем длину переменной, импортируем объект обратно, снова нажимаем кнопку - длина переменной не изменилась. Закрываем форму, открываем еще раз - теперь изменилась. Может, я чего-то не понимаю, но в данный момент не вижу решения проблемы с помощью COOF'а (проблема, поставленная на форуме Маззи, была такой: Можно ли написать что-то вроде CurrForm.ctrlNames[23].VISIBLE:=TRUE ). С другой стороны, с помощью COOF'а, наверное, можно решить проблему, которая была поставлена здесь - возможно ли получить содержимое всех элементов управления, расположенных на форме |
|
07.02.2005, 17:33 | #20 |
Участник
|
Добавлю по COOF. Если бы таблица 2000000001 создавалась в памяти локальной машины, то с ней можны было бы поработать. А так MODIFY() изменит объект глобально, т.е., например, изменение visible для элемента формы отразиться на всех сессиях!
Согласен, получить простой список всех элементов формы возможно, хоть и довольно сложным образом, но этот список практически бесполезен, т.к. обратиться к элементу нельзя. |
|
|
Похожие темы | ||||
Тема | Ответов | |||
Как на форме отобразить поле из другой таблицы | 5 | |||
Можно ли получить информацию в разрезе измерений. | 3 | |||
Свойства группы элементов управления | 3 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|