7.7 Програмная реализация передачи фокуса между элементами формы

Новая тема
Показывать по 10 20 40 сообщений
"есть задача:
предположим, что на форме есть 3 кнопки: - Кнопка1, Кнопка2, Кнопка3. нужно чтобы после нажатия пользователем Кнопки1 и выполнения каких-то действий фокус перешел на Кнопку2. После нажатия Кнопки2 фокус перешел на Кнопку3, после нажатия Кнопки3 обратно на Кнопку1.

В виде кода это будет примерно так:

Процедура ПоКнопке1()
...
Сообщить("Выполнены команды Кнопки1");
//Здесь нужно прописать команду перевода фокуса на кнопку2
...
КонецПроцедуры

Процедура ПоКнопке2()
...
Сообщить("Выполнены команды Кнопки2");
//Здесь нужно прописать команду перевода фокуса на кнопку3
...
КонецПроцедуры

Процедура ПоКнопке3()
...
Сообщить("Выполнены команды Кнопки3");
//Здесь нужно прописать команду перевода фокуса на кнопку1
...
КонецПроцедуры

Речь конечно идет не только о кнопках, а вообще обо всех элементах формы, просто с кнопками нагляднее.

В других языках программирования есть специальные команды, например SetFocus в VisualBasic
В крайнем случае это можно сделать послав комбинацию "горячих клавиш" через команду SendKeys, которые эмулируют нажатие пользователем например комбинации "Alt+Подчеркнутая буква".

В 1С я не нашел аналогов этим командам. Такое ощущение, что програмно переустановить фокус в форме невозможно?

Может кто сталкивался. Помогите пожалуйста!"
"попробуй это, не проверял




Активизировать(,);
Синтаксис:
Активизировать(<ИмяРеквизита>,<Режим>)
Назначение:
Активизировать для редактирования поле диалога.
Параметры:
<ИмяРеквизита> - необязательный параметр. Строка с именем поля диалога, которое нужно активизировать. Пустое имя элемента диалога используется для активизации всей формы.
<Режим> -  необязательный параметр. Имеет смысл только для строк списков. Число: 1 - войти в режим редактирования, 0 - не входить. Значение по умолчанию - 1.
Замечание:
Метод  Активизировать может быть вызван из другого (внешнего) модуля, если в нем известен контекст формы, в которой нужно активизировать элемент диалога. Доступ к методу возможен только в контексте Модуля формы."
Пробовал. Не работает. У меня сложилось впечатление, что команда Активизировать аналогична флажку "Сделать Недоступным" в свойствах элемента диалога.
кажись, что штатно нельзя или же попробовать поиграться со слоями
"Работает. Вопрос: вы имена кнопкам давали?
Элементарный пример. Создаем обработку, кидаем кнопку на форму. В идентификатор пишем "кн1", на закладке дополнительно "ПоКн1()". Аналогично кидаем вторую кнопку (Кн2) и 3-ю (Кн3).
В модуле пишем:
Процедура ПоКн1 ()
Сообщить ("Кн1");
Активизировать ("кн2");
КонецПроцедуры

Процедура ПоКн2 ()
Сообщить ("Кн2");
Активизировать ("кн3");
КонецПроцедуры

Процедура ПоКн3 ()
Сообщить ("Кн3");
Активизировать ("кн1");
КонецПроцедуры

Запускаем и нажимаем Enter раз 5 :)"
"Так не пробовал. Обращался через Активизировать(Форма.Кн1); И не работало. Ваш вариант окказался рабочим.
Между элементами управления (кнопками, флажками ...) перемещается отлично. Но вот загнать фокус на табличную часть формы Справочник.ДляПодбора мне не удалось.
У табличной часть отсутствует идентификатор, который можно забить в команду Активизировать()
Попробовал так, как я обращался к спискам - используя Таб-последовательность. В форму перед полем списка устанавливал ЭлементДиалога в Заголовке подчеркивал одну из букв, и для него вызывал комбинацию Alt+ПодчеркнутаяБуква. Поскольку фокус на элемент диалога установить нельзя, то фокус перескакивал на следующий элемент Таб-последовательности, то есть в нужный мне список. В данном случае я тоже перед табличной частью установил элемент диалога, попытался из кнопки передать фокус на этот элемент. Но фокус как был на кнопке, так там и остался.

Помогайте, что я не так делаю"
"> Работает. Вопрос: вы имена кнопкам давали?
> Элементарный пример. Создаем обработку, кидаем кнопку на форму. В идентификатор пишем "кн1", на закладке дополнительно "ПоКн1()". Аналогично кидаем вторую кнопку (Кн2) и 3-ю (Кн3).
> В модуле пишем:
> Процедура ПоКн1 ()
> Сообщить ("Кн1");
> Активизировать ("кн2");
> КонецПроцедуры
>
> Процедура ПоКн2 ()
> Сообщить ("Кн2");
> Активизировать ("кн3");
> КонецПроцедуры
>
> Процедура ПоКн3 ()
> Сообщить ("Кн3");
> Активизировать ("кн1");
> КонецПроцедуры
>
> Запускаем и нажимаем Enter раз 5 :)



точно - ща проверил, действительно так!"
"На тему возврата к строке справочника после нажатия кнопки (в форме списка или подбора):
Активизировать (Форма.ТекущаяКолонка(), 0);"
"> На тему возврата к строке справочника после нажатия кнопки (в форме списка или подбора):
> Активизировать (Форма.ТекущаяКолонка(), 0);

это вопрос или утверждение?"
> это вопрос или утверждение?
Это утверждение.
Здесь был вопрос - http://www.buh.ru/forum/thread.jsp?id=481462
Собственно
с этой задачи началась тема :), только из далека (с другого конца)
Читают тему
(гостей: 1)

Быстрый переход