![]() |
#1 |
Участник
|
![]()
Динамически создал Dialog, запихал во внутрь несколько DialogFields с типом NoYesCombo. Как после нажатия на кнопку вытащить значения?
Пробовал пробежаться по Count, но нигде не нашел. ![]() |
|
![]() |
#2 |
Участник
|
когда поля создавали, можно их в переменные сохранить и потом использовать. подойдет?
|
|
|
За это сообщение автора поблагодарили: S.Kuskov (2). |
![]() |
#3 |
Участник
|
Несовсем. При создании DF, создаю строку и еще +тип. Потом на диалоге меняют тип, как хотят. Нужно после нажатии на кнопку, пробежаться по всем DF и потом запустить форму. Сейчас главное найти как пробежаться и где найти Count.
|
|
![]() |
#4 |
Участник
|
Покажите код, которым создаются DialgFields.
|
|
![]() |
#5 |
Участник
|
select firstonly common where common.RecId == _recId;
If (Common.RecId>0) { DF= _dialog.addField(typeid(NoYesCombo_RU), _LabelName); DF.value(NoYes::No); } |
|
![]() |
#6 |
Участник
|
Ну так переменная DF уже содержит ваш контрол. Зачем вам его заново получать? Пользуйтесь им.
Если таких DF несколько, то можно их в список сохранить... |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#7 |
Участник
|
никогда. НИКОГДА! НЕ проверяйте recID на > 0!!!!
только на равенство или неравенство нулю. поскольку recid в последних версиях могут содержать и отрицательные значения. Правильный код: If (Common.RecId != 0) короткий код, который на некоторых билдах работал некорретно из-за ошибок в ядре: If (Common.RecId) |
|
|
За это сообщение автора поблагодарили: yuriy_64 (1). |
![]() |
#8 |
Участник
|
А примерчик? А то я, похоже, начинаю тупить.
|
|
![]() |
#9 |
Участник
|
X++: NoYes value; value = DF.Value(); |
|
![]() |
#10 |
Участник
|
У меня DF может быть штук 5. Как по ним бегать?
|
|
![]() |
#11 |
Участник
|
Вернее пробегать в цикле. И как определить кол-во этих DF&
|
|
![]() |
#12 |
Участник
|
Сохраните их в список.
Как вы их отличать собираетесь? По _LabelName? По _recId? Допустим по _LabelName: X++: Map mapDF = new Map(Types::String, Types::Class); X++: DF = _dialog.addField(typeid(NoYesCombo_RU), _LabelName); mapDF.insert(_LabelName, DF); // добавляем очередной контрол в список Обход списка: X++: MapEnumerator m; X++: m = mapDF.getEnumerator();
while (m.moveNext())
{
LabelName = m.currentKey();
DF = m.currentValue();
} |
|
![]() |
#13 |
Axapta
|
За исключением случаев, когда recId используется для аггрегации. Тогда можно. Например
X++: select count(Recid) from myTable; if (myTable.Recid>0) ... ![]() |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#14 |
Участник
|
Спасибо, вроде как работает. А почему нужно создавать второй список? Я уже заметил, что ни Items, ничего подобного при создании диалога нет. Столько времени потерял. Ядолгое время работал на Дельфи. Там как то логичнее. Еще раз спасибо.
|
|
![]() |
#15 |
Участник
|
Цитата:
Собственный список обходить проще, потому-что там только нужные элементы. На диалоге же в общем случае могут присутствовать другие контролы, которые будут только мешаться. |
|
![]() |
#16 |
Участник
|
|
|
![]() |
#17 |
Дмитрий Ерин
|
Если интересуют не столько контролы, сколько их значения, то можно обойтись без хранения своего списка:
X++: MapEnumerator me; anytype value; ; me = Map::create(_dialog.packValues()).getEnumerator(); while (me.moveNext()) { [value] = me.currentValue(); info(strfmt("%1", value)); }
__________________
![]() |
|
![]() |
#18 |
Участник
|
У меня такое ощущение, что ТС не знает о существовании макросов и не знает как их применять в особенности для RunBase-классов.
Я про #CurrentVersion и #CurrentList. И почему-то никто про это не вспомнил, все принялись изобретать велосипед.
__________________
// no comments |
|
|
За это сообщение автора поблагодарили: mazzy (2), S.Kuskov (-2). |
![]() |
#19 |
Участник
|
Цитата:
Макросы же, о которых вы вспомнили, вообще при сериализации уже полученных данных используются а не для взаимодействия с элементами управления. |
|
|
За это сообщение автора поблагодарили: Ruff (1). |
|
|