Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Нестандартный переход фокуса внутри формы - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Нестандартный переход фокуса внутри формы (vba+Excel)
Нестандартный переход фокуса внутри формы
SGerman Дата: Пятница, 15.07.2016, 21:38 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 97
Репутация: 4 ±
Замечаний: 20% ±

Excel 2003
Здравствуйте !

Пользовательская форма в run-time создает и размещает визуальные элементы TextBox, ComboBox и некоторые другие, которые могут принимать фокус. Требование заказчика таково, что передача фокуса из одного элемента в другой при помощи клавиш стрелок или Enter должна выполняться строго по нажатой клавише: если стрелка, то в тот элемент, который справа, слева, вверху или внизу, если Enter, то "обход" клавиш слева направо и сверху вниз, как обычно.
При этом фокус не должен уходить за пределы этих элементов, например в другие "стационарые" элементы или кнопки.

Нет иного способа чем обрабатывать событие KeyDown, но тут засада ! Надо писать событие для КАЖДОГО добавляемого динамически элемента, т.к. у формы в VBA нет свойства KeyPreview, как например в C++ или Delphi ! А это целый огород городить - создавать для каждого типа элементов свой класс, определять и писать классу событие, затем кажому элементу переприсваивать "свой" обработчик события и т.д.

Можно ли как-то проще ?

Спасибо за помощь


Мудрость приходит со старостью. Но иногда старость приходит одна :)
 
Ответить
СообщениеЗдравствуйте !

Пользовательская форма в run-time создает и размещает визуальные элементы TextBox, ComboBox и некоторые другие, которые могут принимать фокус. Требование заказчика таково, что передача фокуса из одного элемента в другой при помощи клавиш стрелок или Enter должна выполняться строго по нажатой клавише: если стрелка, то в тот элемент, который справа, слева, вверху или внизу, если Enter, то "обход" клавиш слева направо и сверху вниз, как обычно.
При этом фокус не должен уходить за пределы этих элементов, например в другие "стационарые" элементы или кнопки.

Нет иного способа чем обрабатывать событие KeyDown, но тут засада ! Надо писать событие для КАЖДОГО добавляемого динамически элемента, т.к. у формы в VBA нет свойства KeyPreview, как например в C++ или Delphi ! А это целый огород городить - создавать для каждого типа элементов свой класс, определять и писать классу событие, затем кажому элементу переприсваивать "свой" обработчик события и т.д.

Можно ли как-то проще ?

Спасибо за помощь

Автор - SGerman
Дата добавления - 15.07.2016 в 21:38
SGerman Дата: Пятница, 15.07.2016, 21:42 | Сообщение № 2
Группа: Пользователи
Ранг: Участник
Сообщений: 97
Репутация: 4 ±
Замечаний: 20% ±

Excel 2003
Я не написал сразу, дополняю для ясности.

Вероятно, слудует написать свой класс для самой формы и там определить свойство KeyPreview, да ? Но как это сделать в VBA, ума не приложу, к тому же форма создана в дизайн-моде.
В общем запутался я совсем :(


Мудрость приходит со старостью. Но иногда старость приходит одна :)
 
Ответить
СообщениеЯ не написал сразу, дополняю для ясности.

Вероятно, слудует написать свой класс для самой формы и там определить свойство KeyPreview, да ? Но как это сделать в VBA, ума не приложу, к тому же форма создана в дизайн-моде.
В общем запутался я совсем :(

Автор - SGerman
Дата добавления - 15.07.2016 в 21:42
SGerman Дата: Суббота, 16.07.2016, 14:17 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 97
Репутация: 4 ±
Замечаний: 20% ±

Excel 2003
Up


Мудрость приходит со старостью. Но иногда старость приходит одна :)
 
Ответить
СообщениеUp

Автор - SGerman
Дата добавления - 16.07.2016 в 14:17
Rioran Дата: Суббота, 16.07.2016, 14:39 | Сообщение № 4
Группа: Авторы
Ранг: Ветеран
Сообщений: 886
Репутация: 283 ±
Замечаний: 0% ±

Excel 2013
SGerman, здравствуйте.

Можно попробовать объявить публичную переменную-массив с 3-мя столбцами: Х-положение, У-положение и ссылками на все формы. Тогда пусть будет несколько разных KeyDown для разных стрелок, которые будут вызывать один и тот же макрос с разным параметром. Этот макрос по переданному параметру будет понимать, на какую форму, ссылки на которые хранятся в массиве, передавать фокус. Нужно будет добавить немного математики и логики, чтобы программа, сравнивая Х и У координаты, понимала какую форму нужно использовать.


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
СообщениеSGerman, здравствуйте.

Можно попробовать объявить публичную переменную-массив с 3-мя столбцами: Х-положение, У-положение и ссылками на все формы. Тогда пусть будет несколько разных KeyDown для разных стрелок, которые будут вызывать один и тот же макрос с разным параметром. Этот макрос по переданному параметру будет понимать, на какую форму, ссылки на которые хранятся в массиве, передавать фокус. Нужно будет добавить немного математики и логики, чтобы программа, сравнивая Х и У координаты, понимала какую форму нужно использовать.

Автор - Rioran
Дата добавления - 16.07.2016 в 14:39
SGerman Дата: Суббота, 16.07.2016, 17:13 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 97
Репутация: 4 ±
Замечаний: 20% ±

Excel 2003
Rioran,
Как передать фокус программно ? (см. соседний топик)


Мудрость приходит со старостью. Но иногда старость приходит одна :)
 
Ответить
СообщениеRioran,
Как передать фокус программно ? (см. соседний топик)

Автор - SGerman
Дата добавления - 16.07.2016 в 17:13
SGerman Дата: Понедельник, 18.07.2016, 20:42 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 97
Репутация: 4 ±
Замечаний: 20% ±

Excel 2003
Up
Неужели никто не сталкивался с передачей фокуса ?


Мудрость приходит со старостью. Но иногда старость приходит одна :)
 
Ответить
СообщениеUp
Неужели никто не сталкивался с передачей фокуса ?

Автор - SGerman
Дата добавления - 18.07.2016 в 20:42
RAN Дата: Понедельник, 18.07.2016, 21:18 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4299
Репутация: 839 ±
Замечаний: 0% ±

2010
В С++ и Delfi SetFocus отсутствует?
Но, если вы используете фреймы, то можете вляпаться в большую лепешку.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеВ С++ и Delfi SetFocus отсутствует?
Но, если вы используете фреймы, то можете вляпаться в большую лепешку.

Автор - RAN
Дата добавления - 18.07.2016 в 21:18
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Нестандартный переход фокуса внутри формы (vba+Excel)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!