| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB .NET > Как избавиться от звука при нажатии клавиш? |
| Автор: tvlad 28.12.2012, 09:11 | ||
| Как избавиться от звука при нажатии управляющей комбинации клавиш, когда в фокусе находится тексбокс? Вот пример:
Свойство KeyPreview для формы установлено в True. |
| Автор: shurikv 29.12.2012, 07:47 |
| Проверял на VS-2008 1 - e.SuppressKeyPress = True - работает 2 - btnOpen.PerformClick() - звуков не издает Может у тебя звук издает MsgBox() при появлении? Или еще что-то? |
| Автор: tvlad 29.12.2012, 09:09 | ||
| e.SuppressKeyPress = True в процедуре обработки KeyDown помогает избавиться от писка при нажатии Enter в однострочном текстбоксе, а для комбинаций с Ctrl - не помогает. Помогла вот такая штука (подсказали на похожем форуме):
|
| Автор: shurikv 30.12.2012, 09:50 |
| Не знаю причины, почему у тебя не работает, а у меня все пашет. С проблемой звука при 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 30.12.2012, 20:33 |
| Спасибо за совет. Действительно, в этом случае можно обойтись без ветвления, мне как-то в голову не приходило. А насчет звука - не знаю, почему у меня этот вариант (e.SuppressKeyPress = True) не срабатывает. Я пользуюсь VS2010, но не думаю, что это как-то влияет. |
| Автор: tvlad 31.12.2012, 06:12 | ||
Кстати, для получения кодов клавиш и знаков я пользуюсь этим:
|