У меня очень простое приложение Windows Forms. А в Windows (или, по крайней мере, в приложениях Windows Forms), когда вы нажимаете Enter, находясь внутри однострочного элемента управления TextBox, вы слышите Ding. Это неприятный звук, означающий, что вы не можете ввести новую строку, потому что это однострочное текстовое поле.
Все в порядке. Однако в моей форме есть 1 текстовое поле и кнопка поиска. И я разрешаю пользователю выполнять поиск, нажимая Enter после того, как он закончил вводить текст, поэтому им не нужно использовать мышь, чтобы нажимать кнопку поиска.
Но этот звук Дин возникает. Это очень раздражает.
Как мы можем сделать так, чтобы звук вообще не воспроизводился в моей форме?
@David H - Вот как я обнаруживаю нажатие Enter:
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
// Perform search now.
}
}
c#
winforms
audio
system-sounds
bendr
источник
источник
Ответы:
Проверьте свойство Form.AcceptButton . Вы можете использовать его, чтобы указать кнопку по умолчанию для формы, в данном случае для нажатия клавиши ввода.
Из документов:
Также существует свойство CancelButton, когда пользователь нажимает escape.
источник
this.AcceptButton = buttonOK; this.CancelButton = buttonCancel;
Меня устраивает:
SuppressKeyPress - это настоящая уловка. Надеюсь, это вам поможет.
источник
e.Handled = true;
было недостаточно; это было то,SuppressKeyPress
что помогло.ToolStripTextBox.KeyDown
. Никакое другое решение не помогло. Спасибо!textbox
иKeyDown
событияПытаться
источник
Tab
первым?Просто добавьте
e.SuppressKeyPress = true;
свое «если».источник
Вы можете использовать KeyPress вместо KeyUp или KeyDown, это более эффективно, и вот как справиться
И скажи мир "Дину"
источник
KeyDown
использованиеe.Handled
иe.SuppressKeyPress
не работает - все еще дребезжит. Но изменение его, как предлагается здесь, для использованияKeyPress' event and
e.Handled` сделало это хорошо.Используется
SuppressKeyPress
для остановки обработки нажатия клавиши после обработки.источник
Я наткнулся на этот пост, пытаясь обработать KeyDown, это сработало для меня.
Подавление нажатия клавиши останавливает отправку события в базовый элемент управления. Это должно сработать, если вы вручную обрабатываете все, что клавиша ввода будет делать в этом текстовом поле. Извините за Visual Basic.
источник
Вероятность того, что кто-то дойдет до этого ответа, очень мала, но некоторые другие ответы действительно пугают. Событие подавления
KeyDown
убивает 2 дополнительных события за один удар. В этом контексте установкаe.Handled
свойства в значениеtrue
бесполезна.Лучше всего установить
Form.AcceptButton
свойство на фактическую кнопку поиска.Есть также другой способ использования
Enter
клавиши - некоторые люди могут захотеть, чтобы она действовала какTAB
кнопка. Для этого добавьте новый объектButton
, установите егоLocation
свойство за пределамиForm
области (т.е.(-100, -100)
) - установкаVisible
свойства в некоторых случаяхfalse
может отключитьButton
обработчики. УстановитеForm.AcceptButton
свойство для вашей новой кнопки. ВClick
обработчике событий добавьте следующий кодthis.SelectNextControl(ActiveControl, true, true, true, true)
Теперь вы можете передать
focus
только тогда , когдаfocus
это наTextBox
вас может потребоваться либо тестовыйActiveControl
тип или использованиеe.Supress
имущества в обработчики событий элементов управления не предназначен для использования вEnter
качествеTAB
Вот так. Вам даже не нужно сниматьe.KeyCode
источник
источник
В WinForms клавиша Enter вызывает звук Ding, поскольку свойство формы AcceptButton не указано. Если вам не нужен AcceptButton, звук дина можно подавить, установив для формы KeyPreview значение true и введя следующее событие KeyPress:
Независимо от того, какой элемент управления активен, при нажатии клавиши Enter больше не будет звука. Поскольку порядок обработки ключевых событий - KeyDown, KeyPress и KeyUp, клавиша Enter по-прежнему будет работать для событий KeyDown для элементов управления.
источник
Установите для свойства IsDefault кнопки поиска значение
true
. Это сделает ее кнопкой по умолчанию, и она будет автоматически нажата при нажатии Enter.источник
To specify the default button of a form, set the AcceptButton property of the form to the desired button.
AcceptButton
кажется более стильным, но я кIsDefault
себе привык .Я жил с этой проблемой достаточно долго и нашел ее здесь.
Поразмыслив над этим в течение некоторого времени и желая найти самый простой способ исправить это, я придумал самый простой, но не такой элегантный способ исправить это.
Вот что я сделал.
Это решило все вторичные проблемы, перечисленные в этом потоке, включая ToolStripMenu. Моя самая большая жалоба была на BindingNavigator, когда я вводил номер записи в текущую позицию для перехода и нажимал ввод.
В соответствии с исходным вопросом, в котором программист хотел использовать функцию поиска при нажатии кнопки ввода, я просто поместил код поиска в невидимую кнопку ОК!
Пока что это, кажется, решает все проблемы, но, как мы все знаем, с Visual Studio, что-то, вероятно, возникнет.
Единственный другой возможный элегантный способ, который я мог придумать, - это написать новый класс обработки нажатия клавиш, который потребует много работы для большинства моих проектов.
источник
Вы можете установить для многострочного текстового поля значение true, а затем обработать нажатие клавиши Enter.
источник
Я изменил свойства текстового поля для многострочного текстового поля, и он работает для меня.
источник
источник
Multiline
код совершенно не имеет значения.