Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как избавиться от звука при нажатии клавиш? 
:(
    Опции темы
tvlad
Дата 28.12.2012, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 28.12.2012

Репутация: нет
Всего: нет



Как избавиться от звука при нажатии управляющей комбинации клавиш, когда в фокусе находится тексбокс?
Вот пример:
Код

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    ...
    ElseIf e.Control And e.KeyCode = Keys.O Then
        e.SuppressKeyPress = True ' не помогает
        e.Handled = True ' не помогает
        btnOpen.Focus() ' не помогает
        btnOpen.PerformClick() ' функция, приписанная этой комбинации (выполняется, но сопровождается противным писком)
    ...
End Sub

Свойство KeyPreview для формы установлено в True.

PM MAIL   Вверх
shurikv
Дата 29.12.2012, 07:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 18.4.2012

Репутация: нет
Всего: нет



Проверял на VS-2008

1 - e.SuppressKeyPress = True - работает
2 - btnOpen.PerformClick() - звуков не издает

Может у тебя звук издает MsgBox() при появлении? 
Или еще что-то?
PM MAIL   Вверх
tvlad
Дата 29.12.2012, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 28.12.2012

Репутация: нет
Всего: нет



e.SuppressKeyPress = True в процедуре обработки KeyDown помогает избавиться от писка при нажатии Enter в однострочном текстбоксе, а для комбинаций с Ctrl - не помогает.
Помогла вот такая штука (подсказали на похожем форуме):
Код

    Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
        If Asc(e.KeyChar)= 15 Then e.Handled = True
    End Sub


PM MAIL   Вверх
shurikv
Дата 30.12.2012, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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)
Кстати, я у себя проверял все эти выражения.

PM MAIL   Вверх
tvlad
Дата 30.12.2012, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 28.12.2012

Репутация: нет
Всего: нет



Спасибо за совет. Действительно, в этом случае можно обойтись без ветвления, мне как-то в голову не приходило.
А насчет звука - не знаю, почему у меня этот вариант (e.SuppressKeyPress = True) не срабатывает. Я пользуюсь VS2010, но не думаю, что это как-то влияет.
PM MAIL   Вверх
tvlad
Дата 31.12.2012, 06:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 28.12.2012

Репутация: нет
Всего: нет



Кстати, для получения кодов клавиш и знаков я пользуюсь этим:
Код
    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        Label3.Text = e.KeyCode
    End Sub

    Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
        Label4.Text = Asc(e.KeyChar)
    End Sub

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0585 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.