| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > подмена кода нажатой клавиши |
| Автор: kobra 30.5.2007, 16:40 | ||
| задача такая: при нажатии на ентер номер 13 превратить в 9. т.е. чтоб программа восприняла его как таб. или вообше 0. в делфи так делаю
а как в шарпе? спосибо |
| Автор: marcusmae 30.5.2007, 17:04 | ||
| Можно перехватывать сообщение, возникающее при нажатии кнопки. Для этого следующие обработчики событий KeyDown и KeyPress следует добавить в класс формы (или иного контрола) : (в примере рассматривается предотвращение нажатия нецифровых символов)
http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.onkeypress.aspx Пример несколько более общий, может это лучше? = В Вашем случае будет достаточно одной проверки на (e.KeyCode == Keys.Enter). |
| Автор: kobra 30.5.2007, 19:45 |
| marcusmae спосибо. этот метод мне известен. но он не решает задачу замены кода клавиши. правда, если нечего лущего не наиду, восползуюс им |
| Автор: marcusmae 30.5.2007, 20:05 | ||
Ой, самого главного не рассказал! Сорри. Да, я показал, как решается задача отлова и нейтрализации клавиши, которую Вы хотите заменять. Остаётся в одном из обработчиков сгенерить новую клавишу. Делается с помощью метода класса http://msdn2.microsoft.com/en-us/library/system.windows.forms.sendkeys(vs.80).aspx. Например, сгенерить TAB будет так :
Я правильно понял, что Вы хотите эмулировать нажатие другой клавиши по нажатию заданной? Существует ещё один способ, основывающийся на работе с WndProc, то есть напрямую с оконными сообщениями - описан, например http://forum.vingrad.ru/topic-110147/view-findpost/p-839920.html. Но он вряд ли понадобится, если только Вы не захотите эмулировать специальные команды типа закрытия/минимизации/максимизации окон и тд. |
| Автор: kobra 30.5.2007, 21:44 |
| SendKeys явно не подходит, он посилает строку и эта строка пишется в елементе. хук ставить не хотел, но видать придется. спосибо |
| Автор: marcusmae 30.5.2007, 21:49 | ||
Прям так и пишет что ли "{TAB"? - Это странно. Вы не забыли ведущий спецсимвол?
|
| Автор: Retro 30.5.2007, 22:09 | ||
Если нужно поменять Enter на Tab, например в textBox(или еще где), я делаю так:
Или я неправильно понял САБЖ? |
| Автор: marcusmae 30.5.2007, 22:26 |
Кажется, нет, kobra хочет подменять нажатие клавиш... Хотя я и сам перестал понимать. Если в контроле активизирована область заполнения, то что жми enter, что эмулируй - всё-равно он будет "отображаться". |
| Автор: kobra 31.5.2007, 08:20 |
в этом конкретном случае, подмена нужна для следуишего: представим себе форму ввода данних. на нем много едитов, комбо и т.д. и т.п. для перехода между контролами стандартно используется Tab и Shift+Tab. код показанный в первом посте, перехватывает Enter превращая его в Tab, при этом нажимая на Enter происходит передача курсора с одного контрола на другои. тоже самое собираюс сделать на шарпе. как понял, и тут придется воспользоватся WndProc-ом, правда кое что там не понял. начну разбиратся. |
| Автор: kobra 31.5.2007, 11:08 | ||
нашел всеже, и тут тотже метод что и в делфи, а я сколько мучался
|