AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

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

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как на форме отобразить поле из другой таблицы Maxi NAV: Программирование 5 30.04.2004 12:32
Можно ли получить информацию в разрезе измерений. Maks NAV: Функционал 3 10.07.2003 17:54
Свойства группы элементов управления uk NAV: Программирование 3 06.05.2003 15:13
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:48.