Пользовательская форма в run-time создает и размещает визуальные элементы TextBox, ComboBox и некоторые другие, которые могут принимать фокус. Требование заказчика таково, что передача фокуса из одного элемента в другой при помощи клавиш стрелок или Enter должна выполняться строго по нажатой клавише: если стрелка, то в тот элемент, который справа, слева, вверху или внизу, если Enter, то "обход" клавиш слева направо и сверху вниз, как обычно. При этом фокус не должен уходить за пределы этих элементов, например в другие "стационарые" элементы или кнопки.
Нет иного способа чем обрабатывать событие KeyDown, но тут засада ! Надо писать событие для КАЖДОГО добавляемого динамически элемента, т.к. у формы в VBA нет свойства KeyPreview, как например в C++ или Delphi ! А это целый огород городить - создавать для каждого типа элементов свой класс, определять и писать классу событие, затем кажому элементу переприсваивать "свой" обработчик события и т.д.
Можно ли как-то проще ?
Спасибо за помощь
Здравствуйте !
Пользовательская форма в run-time создает и размещает визуальные элементы TextBox, ComboBox и некоторые другие, которые могут принимать фокус. Требование заказчика таково, что передача фокуса из одного элемента в другой при помощи клавиш стрелок или Enter должна выполняться строго по нажатой клавише: если стрелка, то в тот элемент, который справа, слева, вверху или внизу, если Enter, то "обход" клавиш слева направо и сверху вниз, как обычно. При этом фокус не должен уходить за пределы этих элементов, например в другие "стационарые" элементы или кнопки.
Нет иного способа чем обрабатывать событие KeyDown, но тут засада ! Надо писать событие для КАЖДОГО добавляемого динамически элемента, т.к. у формы в VBA нет свойства KeyPreview, как например в C++ или Delphi ! А это целый огород городить - создавать для каждого типа элементов свой класс, определять и писать классу событие, затем кажому элементу переприсваивать "свой" обработчик события и т.д.
Вероятно, слудует написать свой класс для самой формы и там определить свойство KeyPreview, да ? Но как это сделать в VBA, ума не приложу, к тому же форма создана в дизайн-моде. В общем запутался я совсем
Я не написал сразу, дополняю для ясности.
Вероятно, слудует написать свой класс для самой формы и там определить свойство KeyPreview, да ? Но как это сделать в VBA, ума не приложу, к тому же форма создана в дизайн-моде. В общем запутался я совсем SGerman
Мудрость приходит со старостью. Но иногда старость приходит одна :)
Можно попробовать объявить публичную переменную-массив с 3-мя столбцами: Х-положение, У-положение и ссылками на все формы. Тогда пусть будет несколько разных KeyDown для разных стрелок, которые будут вызывать один и тот же макрос с разным параметром. Этот макрос по переданному параметру будет понимать, на какую форму, ссылки на которые хранятся в массиве, передавать фокус. Нужно будет добавить немного математики и логики, чтобы программа, сравнивая Х и У координаты, понимала какую форму нужно использовать.
SGerman, здравствуйте.
Можно попробовать объявить публичную переменную-массив с 3-мя столбцами: Х-положение, У-положение и ссылками на все формы. Тогда пусть будет несколько разных KeyDown для разных стрелок, которые будут вызывать один и тот же макрос с разным параметром. Этот макрос по переданному параметру будет понимать, на какую форму, ссылки на которые хранятся в массиве, передавать фокус. Нужно будет добавить немного математики и логики, чтобы программа, сравнивая Х и У координаты, понимала какую форму нужно использовать.Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279