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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.05.2014, 11:30   #1  
Мартынов Дмитрий is offline
Мартынов Дмитрий
Участник
 
236 / 66 (3) ++++
Регистрация: 02.02.2004
Адрес: г. Москва
Цитата:
Сообщение от userax2009 Посмотреть сообщение
Нет. Есть форма А с кнопкой, по нажатию которой открывается форма Б с данными для поля на форме А. Подумал, для того, чтобы корректно отображать данные в форме Б, необходимо определить на каком поле в данный момент находиться курсор. Соответственно вопрос, как определить где в данный момент мой курсор ?
Может быть так?
X++:
public void gotFocus()
{
    ;
    super();
    curFieldId = this.fieldBinding().fieldId();
}
Как говорил Ходжа Насреддин про свое надежное средство от тараканов: ловишь таракана и этим средством ему по морде... Это я к тому, что метод gotFocus придется перекрыть в каждом поле грида.
Старый 29.05.2014, 19:10   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
4,000 / 3298 (118) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Мартынов Дмитрий Посмотреть сообщение
Может быть так?
Как говорил Ходжа Насреддин про свое надежное средство от тараканов: ловишь таракана и этим средством ему по морде... Это я к тому, что метод gotFocus придется перекрыть в каждом поле грида.
Ну почему же ?
Можно запихнуть анализатор сюда :
\Classes\SysSetupFormRun\selectControl

и запоминать какой контрол активировался и.т.п.
А если только для одной формы интересно, то аналогичный метод для конкретной формы.

Последний раз редактировалось Logger; 29.05.2014 в 19:13.
За это сообщение автора поблагодарили: Мартынов Дмитрий (1), Pustik (2), gl00mie (3).
Старый 29.05.2014, 20:14   #3  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Цитата:
Сообщение от Logger Посмотреть сообщение
Ну почему же ?
Можно запихнуть анализатор сюда :
\Classes\SysSetupFormRun\selectControl

и запоминать какой контрол активировался и.т.п.
А если только для одной формы интересно, то аналогичный метод для конкретной формы.
думаю не покатит. Человека интересует момент, когда открывается вторая форма, и там он хочет видеть на каком же поле находился курсор, находящийся на первой форме. Метод SelectControl уже позади. Если я не ошибаюсь, то интуиция мне подсказывает, что это сделать вполне реально, надо просто поэкспериментировать. Завтра будет такая возможность.
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
Старый 29.05.2014, 20:20   #4  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Цитата:
Сообщение от Logger Посмотреть сообщение
и запоминать какой контрол активировался и.т.п.
Вот это не заметил, пропустил , Sorry. Тоже вариант. останется только это реализовать.
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
Старый 29.05.2014, 21:27   #5  
Мартынов Дмитрий is offline
Мартынов Дмитрий
Участник
 
236 / 66 (3) ++++
Регистрация: 02.02.2004
Адрес: г. Москва
Цитата:
Сообщение от Logger Посмотреть сообщение
selectControl ...... метод для конкретной формы.
Хорошая мысль. Как то так получается:

X++:
public boolean selectControl(FormControl _control)
{
    boolean ret;
    ;
    ret = super(_control);
    
    if (ret && _control.parentControl().name() == "Grid2")
    {
        curFieldId = _control.fieldBinding().fieldId();
    }
    else
    {
        curFieldId = 0;
    }
    return ret;
}
А дальше можно юзать curFieldId где угодно. Хоть в active хоть в canClose...
За это сообщение автора поблагодарили: S.Kuskov (1).
Старый 25.06.2014, 16:04   #6  
userax2009 is offline
userax2009
Участник
 
24 / 10 (1) +
Регистрация: 16.05.2014
Цитата:
Сообщение от Logger Посмотреть сообщение
Ну почему же ?
Можно запихнуть анализатор сюда :
\Classes\SysSetupFormRun\selectControl

и запоминать какой контрол активировался и.т.п.
А если только для одной формы интересно, то аналогичный метод для конкретной формы.
Обьясните пожалуйста более подробней как это сделать
Старый 25.06.2014, 16:43   #7  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
4,000 / 3298 (118) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от userax2009 Посмотреть сообщение
Обьясните пожалуйста более подробней как это сделать
Например, так

X++:
public boolean selectControl(FormControl _control)
{
    #GRD_sysDataBaseLogFixStack4Button // GRD_sysDataBaseLogfixStack_pkoz // pkoz 19.05.2011
    boolean ret;
    ;
    // GRD_sysDataBaseLogfixStack_pkoz // pkoz 19.05.2011 -->
//    if (GRD_isPkoz())
    {
        //mes = strFMT("%1 : %2", Element.name(),  _control.name());
        //info::messageWinAddLine(mes);
      //  info::messageWinAddLine( strFMT("%1 : %2 : %3", Element.name(),  _control.name(), ret));
        /*
         info::messageWinAddLine( strFMT("%1 : %2 : %3 : %4",
            this ? this.name() : "",
            _control ? _control.name() : "",
            ret,
            classid2Name(_control ? _control.handle() : 0)
            ));
        */
        if (_control)
        {
            switch (_control.handle())
            {
            case classNum(FormButtonControl)         :    // button
            case classNum(FormCommandButtonControl)  :   // commandButton
            case classNum(FormFunctionButtonControl) :  // menuItem
            case classNum(FormMenuButtonControl)     : // MenuButton
                    if (infolog)
                    {
                        infolog.globalCache().set(#GRD_FixStack4Button, #GRD_FixStack4ButtonMainKey, [
                            this ? this.name() : "",
                            _control ? _control.name() : "",
                            _control ? _control.id() : 0,
                            ret
                        ]);
                    }
                    break;
            }
        }

    }
    // GRD_sysDataBaseLogfixStack_pkoz // pkoz 19.05.2011 <--

    ret = super(_control);

    return ret;
}
Это цитата из нашего кода. Он проверяет, что тип выбранного контрола - кнопка, запоминаем информацию о нем в глобальном кеше. А затем хитрым образом прокидывает её на сервер в начале транзакции (и при наличии еще ряда оптимизаций, минимизирующих клиент серверный трафик) и там уже использует при записи в SysDatabaseLog - ставит в стек вызовов имя кнопки и формы с которого он начинался. Естественно мы сохраняем стек вызовов в SysDataBaseLog ( в отличие от стандартного приложения)
За это сообщение автора поблагодарили: S.Kuskov (5).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Поле в гриде не из датасорса Katuxa DAX: Программирование 9 01.03.2013 16:24
Закрыто поле на таблице kaw DAX: Программирование 2 15.03.2012 10:55
Пробелы теряются в текстовом поле erudit DAX: Программирование 20 07.04.2011 17:47
сопоставление оплат клиента, переносов сальдо-поле накладная в общем журнале? Aquarius DAX: Функционал 3 28.01.2009 12:51
Поле "Оплатить до" в строке общего журнала longson DAX: Функционал 7 29.03.2008 14:38

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

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

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