11.02.2011, 18:41 | #1 |
Участник
|
Перекос грида в стандартной AX2009
Здравствуйте, уважаемые коллеги. Долго меня мучила эта проблема, сегодня это все вылилось на пользователей.
AX2009. Попробуйте в репозитарии встать на таблицу CustInvoiceTable, открыть ее,расширить побольше на весь экран и нажимать клавишу Enter (переход к следующему полю.Нажимать желательно побольше).Увидите очень красивую картинку. Я бы не волновался , если бы это было только в обозревателе для разработчиков, такое происходит в обычных формах,в которых работают пользователи, правда не всегда. Понять логику происхождения такого глюка я пока не смог.
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
|
За это сообщение автора поблагодарили: Logger (3). |
17.02.2011, 10:07 | #2 |
Участник
|
После долгих экспериментов выяснил, что на формах этот глюк происходит зачастую тогда, когда отключено автовыравнивание полей на гриде autoSizeColumns(false).Тема автовыравнивания тут много раз обсуждалась. Поскольку с включенным автовыравниванием полей заметные тормоза, включать на формах его как-то не хотелось. А вот в обозревателе таблиц постоянно грид перекашивает при переходе с ячейки грида, используя клавишу Enter. Хоть включай автовыравнивание, хоть выключай. Но все - таки проблему удалось решить следующим образом :
В классе 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> // перекос грида int Gridhwnd; Set GridControls; Set Grids; // перекос грида #if.never #define.CurrentVersion(1) #localmacro.CurrentList #endmacro #endif } X++: public void init() { // <GEEU> this.raiseEvent_W(methodstr(FormRunListener_W, beforeInit)); // </GEEU> // перекос грида Grids = new Set(Types::Integer); GridControls = new Set(Types::Integer); // перекос грида super(); SysSecurityFormSetup::loadSecurity(this); this.dimensionFieldCtrls(); this.inventStorageDimFieldCtrls(); if (this.isWorkflowEnabled()) { workflowControls = SysWorkflowFormControls::construct(this); workflowControls.initControls(); } // <GEEU> this.raiseEvent_W(methodstr(FormRunListener_W, afterInit)); // </GEEU> } X++: public boolean selectControl(FormControl _control) { boolean ret; Object Object; void findGridControls(Object _ctrl) { int i; Object _subcontrol; for (i=1; i <=_ctrl.controlCount(); i++) { _subcontrol = _ctrl.controlNum(i); if (_subcontrol.isContainer()) findGridControls(_subcontrol); else { switch (_subcontrol.handle()) { case classnum(FormStringControl): case classnum(FormRealControl): case classnum(FormIntControl): case classnum(FormInt64Control): case classnum(FormDateControl): case classnum(FormTimeControl): case classnum(FormDateTimeControl): case classnum(FormComboBoxControl): GridControls.add(_subcontrol.hwnd()); break; default: break; } } } } ret = super(_control); // перекос грида if (_control) { switch (_control.handle()) { case classnum(FormGridControl): Gridhwnd = _control.hWnd(); if (!Grids.in(Gridhwnd)) findGridControls(_control); Grids.add(Gridhwnd); 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): if (GridControls && GridControls.in(_control.hWnd())) _control.AlignControl(false); break; default: break; } } // перекос грида return ret; }
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
|
За это сообщение автора поблагодарили: raz (5), Logger (7), Daiver (1), gl00mie (5). |
13.07.2012, 16:26 | #3 |
Участник
|
Прошу прощения, при этом автовыравнивание на формах не выключаем, так?
|
|
13.07.2012, 17:48 | #4 |
Участник
|
Я думаю что можно и не выключать, если это Вам удобно. Мы его отключили только потому, что наблюдались большие тормоза, особенно там, где много дисплей-методов, плюс пользователи от этого эффекта большого восторга не испытывали. После отключения и выскочил этот глюк.
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
|
За это сообщение автора поблагодарили: Logger (1). |
Теги |
ax2009, grid, syssetupformrun, баг, грид, интерфейс, форма |
|
|