![]() |
Модераторы: diadiavova, gambit |
![]() ![]() ![]() |
|
tvlad |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 28.12.2012 Репутация: нет Всего: нет |
Как избавиться от звука при нажатии управляющей комбинации клавиш, когда в фокусе находится тексбокс?
Вот пример:
Свойство KeyPreview для формы установлено в True. |
|||
|
||||
shurikv |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 18.4.2012 Репутация: нет Всего: нет |
Проверял на VS-2008
1 - e.SuppressKeyPress = True - работает 2 - btnOpen.PerformClick() - звуков не издает Может у тебя звук издает MsgBox() при появлении? Или еще что-то? |
|||
|
||||
tvlad |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 28.12.2012 Репутация: нет Всего: нет |
e.SuppressKeyPress = True в процедуре обработки KeyDown помогает избавиться от писка при нажатии Enter в однострочном текстбоксе, а для комбинаций с Ctrl - не помогает.
Помогла вот такая штука (подсказали на похожем форуме):
|
|||
|
||||
shurikv |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 18.4.2012 Репутация: нет Всего: нет |
Не знаю причины, почему у тебя не работает, а у меня все пашет.
С проблемой звука при Enter сталкнулся давно. Ответ нашел в интернете (дата файлика с ответом 25-11-2008). Но я тогда еще не перешел на VS-2008, а писал на VS-2003. Там к сожалению свойства "SuppressKeyPress" еще не было. Поэтому пришлось придумать обходной путь. Выяснил, что этот звук - системный и задается в настройках "Звуки и аудиоустройства", закладка "Звуки", раздел "Программные события" - "Стандартный звук". Задаешь другой WAV-файл, меняется звук. Нашел по имени файла параметр в реестре [HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\.Default\.Current] @="Windows Vista Default.wav" Дальше совсем просто: программа запустилась, стерла в реестре параметр, при закрытии восстановила. Варварский метод, но работал. Когда перешел на VS-2008 стал пользоваться свойством "SuppressKeyPress", что намного проще. Хотя вариант с "e.Handled = True" мне очень понравился, жаль не знал о нем раньше. И маленький совет: выражение If Asc(e.KeyChar) = 15 Then e.Handled = True предлагаю заменить на короткое e.Handled = (Asc(e.KeyChar) = 15) или корректное e.Handled = CBool(Asc(e.KeyChar) = 15) Но сам я предпочитаю более длинное, но более понятное (я не в состоянии помнить все управляющие коды) e.SuppressKeyPress = CBool(e.Control And e.KeyCode = Keys.O) Кстати, я у себя проверял все эти выражения. |
|||
|
||||
tvlad |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 28.12.2012 Репутация: нет Всего: нет |
Спасибо за совет. Действительно, в этом случае можно обойтись без ветвления, мне как-то в голову не приходило.
А насчет звука - не знаю, почему у меня этот вариант (e.SuppressKeyPress = True) не срабатывает. Я пользуюсь VS2010, но не думаю, что это как-то влияет. |
|||
|
||||
tvlad |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 28.12.2012 Репутация: нет Всего: нет |
Кстати, для получения кодов клавиш и знаков я пользуюсь этим:
|
|||
|
||||
![]() ![]() ![]() |
Правила форума VB .NET | |
|
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | VB .NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |