04.02.2011, 13:55 | #1 |
Участник
|
Дублирование адресов на форме поставщиков Ax2009
Возникла необходимость продублировать грид с адресами, теперь при попытке вставить запись в новый грид. фокус перескакивает на оригинальный. (гриды на разных закладках, источник(и) данных один(и))
Можно ли вообще так делать? И где что можно перекрыть, чтобы не прыгать по закладкам? Никак не соображу Последний раз редактировалось uchenik; 04.02.2011 в 14:05. |
|
04.02.2011, 14:58 | #2 |
Участник
|
А как делали? Сдублировали оригинальный TabPage с адресом?
Если так, то смотрите в новом TabPage метод tabPageAcivated, скорее всего тоже перенесли. Там строчка X++: addressGrid.setFocus(); |
|
04.02.2011, 15:03 | #3 |
Участник
|
Само по себе это не должно вызывать такого поведения. Скорее всего фокус ввода смещает код находящийся в методах источника данных. Что бы точно выяснить источник проблемы можно поставить breakpoint в методе pageActivated вкладки и по стеку вызовов вычислить виновника.
если так, то по логике на новую вкладку вообще не попасть Последний раз редактировалось S.Kuskov; 04.02.2011 в 15:05. |
|
04.02.2011, 15:03 | #4 |
Участник
|
Сделайте второй такой же датасорс с LinkType : Passive, и привяжите к нему второй tabpage, прыгать не будет - это, как вариант.
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
04.02.2011, 15:08 | #5 |
Участник
|
|
|
04.02.2011, 15:09 | #6 |
Участник
|
|
|
04.02.2011, 15:09 | #7 |
Участник
|
еще вариант - наверной самый лучший - в свойствах второго TabPage ставите Avtodeclaration - Yes; и в методе Create датасоурса пишите :
X++: public void create(boolean _append = false) { boolean active = false; if (TabPage2.isActivePage()) active = true; super(_append); if (active) TabPage2.activatePage(); }
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
04.02.2011, 15:18 | #8 |
Участник
|
Цитата:
Сообщение от Pustik
еще вариант - наверной самый лучший - в свойствах второго TabPage ставите Avtodeclaration - Yes; и в методе Create датасоурса пишите :
X++: public void create(boolean _append = false) { boolean active = false; if (TabPage2.isActivePage()) active = true; super(_append); if (active) TabPage2.activatePage(); } |
|
04.02.2011, 15:29 | #9 |
Участник
|
в ClassDeclaration формы описываете переменную
X++: boolean active; X++: active = true; X++: if (active == false) return; X++: public void create(boolean _append = false) { active = false; if (TabPage2.isActivePage()) active = true; super(_append); if (active) TabPage2.activatePage(); active = true; } X++: public void pageActivated() { if (active == true) return; super(); }
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. Последний раз редактировалось Pustik; 04.02.2011 в 15:33. |
|
04.02.2011, 15:34 | #10 |
Участник
|
Чем обусловлено использование одного и того же набора датасорсов для разных гридов? если ничем кроме лени - то сделайте отдельные датасорсы, быстрее отмучаетесь
|
|
04.02.2011, 15:44 | #11 |
Участник
|
Вот в форме поставщиков не работает.
Какой-то подход не очень, куча лишних источников данных, нужно помнить, что их править только вместе. |
|
04.02.2011, 16:09 | #12 |
Участник
|
а куда у вас прыгает на закладку обзор или на закладку первого адреса?
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
04.02.2011, 16:19 | #13 |
Участник
|
declaration
X++: boolean _create X++: _create = false X++: if (Tab.isActivePage()) _create = true; super(... X++: ... if (_create) return false; ... |
|
04.02.2011, 16:19 | #14 |
Участник
|
|
|
04.02.2011, 16:21 | #15 |
Участник
|
Проследил источник вызова pageActivated. Легче не стало
Цитата:
[c] \Classes\FormTabPageControl\pageActivated 4
[c] \Classes\FormTabControl\TabChanged [c] \Classes\FormStringControl\enter [c] \Classes\FormRun\selectControl [c] \Classes\FormDataSource\create [c] \Classes\FormDataSource\Next [c] \Classes\FormRun\task [c] \Classes\SysSetupFormRun\task X++: public void create(boolean _append = false) { breakpoint; super(_append); } P.S.: Эксперименты проводил на простейшей тестовой формочке, так что влияние других факторов минимально. |
|
04.02.2011, 16:33 | #16 |
Участник
|
сделайте вторую переменную для отслеживания второго дергания change. например счетчик i = 1; ну что-то типа
TabChange X++: if (_create && i < 2) { i++ return false; } X++: super();
i=0
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
04.02.2011, 16:37 | #17 |
Участник
|
Ну это совсем костыль какой-то, а если оно три раза будет вызываться?
Если пытаться корректировать в pageActivated, там может раз 30 дернуться, в зависимости от версии |
|
04.02.2011, 17:20 | #18 |
Участник
|
X++: public boolean tabChange(int _FromTab) { boolean ret; ; if (_create) { CopyOfAddressGrid.setFocus(); _create = false; return false; } ret = super(_FromTab); return ret; } |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|