AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 12.01.2011, 11:33   #1  
S.Kuskov ist offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3.448 / 1792 (66) ++++++++
Registriert seit: 28.04.2007
Ort: Калуга
Выйти из ячейки грида после двойного клика
Если выбрать ячейку грида не одинарным кликом, а двойным, то она также как и при одинарном клике получает фокус и переходит в режим редактирования. Но вот если после этого попытаться перейти к другой ячейке (кликнуть по другой ячейке), то после первой попытки фокус не переместиться, а останется на прежней ячейке и только после повторного клика можно будет выбрать другую ячейку.

Особенно это раздражает, когда перед тем как перейти на новую ячейку, пользователь прокручивает грид на несколько экранов. Тогда вместо выбора новой ячейки, система отбрасывает фокус к старой позиции. И приходится заново прокручивать грид.

Конечно в большинстве случаев двойной щелчок не задействован, но что делать если он нужен? Можно ли как-нибудь победить стандартное поведение грида?

P.S.: Да, забыл написать: AX2009

Geändert von S.Kuskov (12.01.2011 um 11:46 Uhr)
Alt 12.01.2011, 11:43   #2  
samolalex ist offline
samolalex
Участник
Benutzerbild von samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Registriert seit: 18.06.2010
Ort: Москва
В Axapta 3 SP1 я такого нюанса не заметил - фокус перемещается сразу на новую ячейку, даже после двойного клика по "предыдущей". Быть может в более поздних версиях по-другому.
__________________
С уважением, Александр.
Alt 12.01.2011, 17:56   #3  
kashperuk ist offline
kashperuk
Участник
Benutzerbild von kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.361 / 2084 (78) +++++++++
Registriert seit: 30.05.2004
Ort: Atlanta, GA, USA
Создал баг, правда его Sevirity/Priority очень низкий, поэтому в АХ6 очень врядли пофиксят.
This post has been rated by: S.Kuskov (2).
Alt 13.01.2011, 11:42   #4  
S.Kuskov ist offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3.448 / 1792 (66) ++++++++
Registriert seit: 28.04.2007
Ort: Калуга
Проведя ряд экспериментов установил, что двойной клик по ячейке грида меняет состояние не отдельной ячейки а грида в целом. Т.к. состояние это не сбрасывается после перехода к другим ячейкам при момощи навигационных клавиш, и даже после потери гридом фокуса.

Так же не важно вошли ли вы в ячейку двойным кликом или потом сделали двойной щелчёк в уже активной ячейке. Грид также перейдёт в описываемое состояние.

Я смог найти только один способ выхода из этого состояния - это лишний(холостой) щелчёк мыши. Который, при большом желании, можно сгенерировать и искуственно. Я пока так и поступил:
X++:
WinAPI::SendMessageEx(Grid.hwnd(), #WM_LBUTTONDOWN, 1, 1);
WinAPI::SendMessageEx(Grid.hwnd(), #WM_LBUTTONUP, 1, 1);
Alt 14.01.2011, 08:36   #5  
Pustik ist offline
Pustik
Участник
 
807 / 372 (14) ++++++
Registriert seit: 04.06.2004
А можно поподробнее, где это все надо и как написать? Нас такое поведение грида тоже раздражает.
Alt 14.01.2011, 09:21   #6  
S.Kuskov ist offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3.448 / 1792 (66) ++++++++
Registriert seit: 28.04.2007
Ort: Калуга
Zitat:
Zitat von Pustik Beitrag anzeigen
А можно поподробнее, где это все надо и как написать?
Как поймать двойной клик это вообще отдельная песня . Этот вопрос стоит отдельной темы для обсуждения. Но только давайте определимся. Если двойной клик у вас не задействован, и вопросом вы интересуетесь на всякий случай, что бы перестраховаться, а вдруг пользователь нажмёт, то тогда поверьте овчинка выделки не стоит (проще научить пользователя не нажимать). Но если вы интересуетесть этой проблемой из-за того, что у вас уже висит какое-то действие на этом событии. Тогда там то и сгенерируйте те самые WM_LBUTTONDOWN и WM_LBUTTONUP.

P.S.: Если я не удовлетворил вашего любопытства, спрашивайте я попробую ответить на конкретные вопросы. К сожалению в общем виде этот вопрос не имеет простого ответа.
Alt 14.01.2011, 09:27   #7  
Pustik ist offline
Pustik
Участник
 
807 / 372 (14) ++++++
Registriert seit: 04.06.2004
Я так понимаю общего решения нет. Рассматриваются частные случаи. Эх блин. Конечно, под каждым контролом ставить кусок кода, это лучше застрелиться.
Alt 14.01.2011, 09:33   #8  
Pustik ist offline
Pustik
Участник
 
807 / 372 (14) ++++++
Registriert seit: 04.06.2004
Просто у нас некоторые пользователи научены двойной щелчок использовать для того, чтобы сразу выделить содержимое ячейки, потом скопировать его в буфер и далее использовать по назначению. Это достаточно неприятно, когда покидаешь ячейку только со 2-ой попытки.
Alt 14.01.2011, 09:46   #9  
S.Kuskov ist offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3.448 / 1792 (66) ++++++++
Registriert seit: 28.04.2007
Ort: Калуга
Если хотите заморочится, то при помощи formRun.installMessageProc() перехватывайте событие #WM_LBUTTONDBLCLK всех контролов лежащих на гриде плюс самого грида. И в нём реализуйте дополнительное нажатие. В большинстве случаев этого достаточно.
This post has been rated by: Pustik (2).
Alt 14.01.2011, 13:12   #10  
Pustik ist offline
Pustik
Участник
 
807 / 372 (14) ++++++
Registriert seit: 04.06.2004
Заморачиваться особенно не пришлось
в классе SysSetupFormRun описываем переменную
X++:
// This is a framework class. Customizing this class may cause problems with future upgrades to the software.
public class SysSetupFormRun extends FormRun
{
    SysWorkflowFormControls     workflowControls;
    // <GEEU>
    // Event listeners list
    List listeners_W;
    // </GEEU>
    // kos глюк выхода из ячейки грида после двойного клика
    int Gridhwnd;
    // kos глюк выхода из ячейки грида после двойного клика
затем в этом классе создаем метод

X++:
void catchMessage(int _hwnd, int _message, int _wParam, int _lParam, int _px, int _py)
{
    /*
    #define.WM_LBUTTONDOWN   (0x0201)
    #define.WM_LBUTTONUP     (0x0202)
    #define.WM_LBUTTONDBLCLK (0x0203)
    */
    #WinAPI
    ;

    WinAPI::SendMessageEx(Gridhwnd, #WM_LBUTTONDOWN, 1, 1);
    WinAPI::SendMessageEx(Gridhwnd, #WM_LBUTTONUP, 1, 1);

}
и теперь в этом классе перекрываем метод selectControl и прописываем

X++:
public boolean selectControl(FormControl _control)
{
    boolean ret;
    /*
    #define.WM_LBUTTONDOWN   (0x0201)
    #define.WM_LBUTTONUP     (0x0202)
    #define.WM_LBUTTONDBLCLK (0x0203)
    */
    #WinAPI;

    ret = super(_control);
    // kos глюк выхода из ячейки грида после двойного клика
    if (_control)
    {
        switch (_control.handle())
        {
            case classnum(FormGridControl):
            Gridhwnd = _control.hWnd();
            break;
            case classnum(FormStringControl):
            case classnum(FormRealControl):
            case classnum(FormIntControl):
            case classnum(FormInt64Control):
            case classnum(FormDateControl):
            case classnum(FormTimeControl):
            case classnum(FormDateTimeControl):
            case classnum(FormComboBoxControl):
            this.installMessageProc(#WM_LBUTTONDBLCLK, _control.hWnd(), "catchMessage");
            break;
            default:
            break;
        }
    }
    // kos глюк выхода из ячейки грида после двойного клика

    return ret;
}
Заработало корректно во всех местах.
This post has been rated by: SIrina (1), S.Kuskov (2).
Stichworte
syssetupformrun

 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
EP AX2009: сохранить параметры грида (фильтр, позиционирование) caper DAX: Программирование 9 01.04.2010 09:16
Суммовые после списания со склада Ann DAX: Функционал 1 26.10.2004 14:33
Обработка событий ячейки грида simply DAX: Программирование 2 24.05.2004 15:36
Буферные ячейки на складе - зачем? renat DAX: Функционал 16 01.04.2004 20:22
Сколько раз вызывается DataMethod поля грида при инициализации этого грида? storer DAX: Программирование 2 18.11.2003 14:03

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 18:53 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.