15.11.2003, 16:13 | #1 |
Участник
|
Управление FormControl' ом.
Всем привет!
Подскажете как можно установить фокус ввода на определенном FormControl. FormControl.SetFocus не дает желаемого результата, а хотелось бы чтоб курсор замигал в нужном мне котроле. |
|
15.11.2003, 16:36 | #2 |
Участник
|
Во первых, постарайтесь не вмешиваться в morphX настолько глубоко.
Представьте, что ваше поле будет выключено функциональными или конфигурационными ключами. Куда Аксапта усатновит фокус? Во-вторых, если все же хотите вмешиваться, посмотрите как это делается в форме SalesTable при переключении режима Расширено/Упрощено. Посмотрите также на проекты, стратегические планы, CRM... с их кнопочками иерархия. Но лучше этого не делать. Именно подобные формы безумно бесит пользователей своми фокусами. Извините за калабмур. Лучше установите нормальный порядок полей. Поиграйтесь свойством skip Enter и т.п. |
|
15.11.2003, 16:42 | #3 |
Участник
|
Да, еще одно соображение.
В 3.0 пользователь может менять порядок полей, переносить на другие закладки, добавлять новые поля из таблиц... либо вы все это ему должны запретить, либо не управлять вручную фокусом. |
|
16.11.2003, 11:45 | #4 |
Участник
|
Дело в том, что мне необходимо создавать новую запись, в таблице, с которой связан заранее не известный FormControl.
Я пытался это сделать следующим образом: FormRun fr = args.caller(); FormDataSource = fr.dataSource; FormControl = fr.design.controlName("MyControl"); //Имя контрола передано в функцию FormControl.SetFocus(); FormDataSource.Create(true); FormDataSource.InitValue(); ------------ А в SalesTable установить фокус на другие контролы мне удалось путем простого SetFocus; ------------- На самом деле, меня интересует проблема создания новой строки. Я пытаюсь имитировать действия пользователя: 1) пользователь счелкает на контрол 2) нажимает комбинацию клавиш "Ctrl - N" |
|
16.11.2003, 15:50 | #5 |
Участник
|
Цитата:
Изначально опубликовано klinch
...необходимо создавать новую запись, в таблице, с которой связан заранее не известный FormControl. Обычно, когда звучит техзадание, сформулированное подобным образом... программист просто не знает чего он хочет. Тогда я обычно говорю, что я туп. Объясните, пожалуйста, человекческим языком чего вы хотите. Для чего нужно формулировать на "человеческом" языке? Для того, чтобы понять чего от вас хотят пользователи и что вы им сдавать будете. Представьте, что вы задачу решите. Представьте, что вам нужно показать/сдать пользователю/заказчику сделанную вами работу. Вы вот так вот и будете описывать вашу работу? |
|
16.11.2003, 16:13 | #6 |
Участник
|
Меня удивляет ваш страх перед обстрактными пользователями.
Спешу вас заверить, что ни одного юзера, после написания программы, не пострадает. Единственный человек, который будет ей пользоваться это я сам. А проблема не так уж смешна, каковой вы ее пытаетесь представить. Если мне необходимо закачать данные в некоторые таблицы, то делать это нужно только через контролы на форме, связанные с этой таблицей. Делать нужно так для того, что бы отработали все механизмы обработки данных!!!! При прямой записи в таблицы получится всякая херня!!! (не отработают номерные серии и т.д.) Дак вот. Остается следующий выход - имитировать работу пользователя с формой. --------------------------------------------------------------------- За последние 3 часа я нашел, что : 1) метод setFocus() дает именно, то что я хотел. (Ну вот так уж) 2) для того, что бы создать новую строку (после того как нужный контрол получил фокус) необходимо выполнить FormRun.ObjetcSet().Create(true) |
|
16.11.2003, 16:21 | #7 |
Участник
|
Это не страх. Это понимание, что только для них все и делается. Насчет проблемы. Ничего смешного не вижу. Я проблему не понимаю. Т.е. техническию задачу - вижу. А зачем это нужно - не понимаю. Теперь вроде понятнее - импорт. Попробуйте посмотреть http://axapta.mazzy.ru/hints/easyimport/ Если вы делаете разовый импорт, то результат получите быстрее, нежели разбираться. |
|
16.11.2003, 16:23 | #8 |
Участник
|
Цитата:
Изначально опубликовано klinch
Если мне необходимо закачать данные в некоторые таблицы ... При прямой записи в таблицы получится всякая херня!!! Может смогу подсказать? |
|
17.11.2003, 11:10 | #9 |
Дмитрий Ерин
|
имитировать работу пользователя
Цитата:
Изначально опубликовано klinch
Дак вот. Остается следующий выход - имитировать работу пользователя с формой. --------------------------------------------------------------------- За последние 3 часа я нашел, что : 1) метод setFocus() дает именно, то что я хотел. (Ну вот так уж) 2) для того, что бы создать новую строку (после того как нужный контрол получил фокус) необходимо выполнить FormRun.ObjetcSet().Create(true) PHP код:
|
|
17.11.2003, 11:31 | #10 |
Участник
|
Слушайте, а можно поподробней про FormRun.Task()?
Заранее благодарен. |
|
17.11.2003, 11:42 | #11 |
Дмитрий Ерин
|
Честно говоря, сам с ним не работал, а того, кто работал сейчас спросить не могу.
Помню, что наткнулся он на него, кажется, путем отладки, поставаив в нужном месте точку останова и выполняя те или иные действия вручную. Помню, что Task(272) вроде дожен соответствовать сохранению измененных данных, но он как-то странно глючил В документации, как водится, ничего обнаружить не удалось Сейчас попробую полазить - самому интересно стало... Вот, покопался, обнаружил, что можно, например, у формы перехватить метод Task, чтобы посмотреть обрабатываемые идентификаторы. Попробуй, может пригодится: public int task(int _taskId) { int ret; ret = super(_taskId); print "ID=",_taskId," ret=",ret; return ret; } |
|
17.11.2003, 12:19 | #12 |
Участник
|
Цитата:
Изначально опубликовано Ruff
Попробуй, может пригодится: .... [/B] Пригодится и еще как!!! Огромное спасибо. Работая над управлением формой из вне, наткнулся на следующий глюк: 1)передаю formRun одной формы в процедуру другой формы 2)пытаюсь управлять DataSource первой формы.... 3)ловлю глюки, т.к. методы не отрабатывают обычным для них образом. Вот и приходится залазить в все глубже и глубже. P.S. Подаем.. Что, уже дно? Нет, еще копаем! |
|