Как расфокусировать кнопку, когда сканер штрих-кода отправляет данные, заканчивающиеся символом новой строки - PullRequest
2 голосов
/ 02 января 2012

Я пишу приложение со штрих-кодом на C #.У меня есть регулярное выражение EAN-13 для обнаружения штрих-кодов в функции "Form1_KeyPress".У меня нет механизма, чтобы определить, откуда поступает информация.Вот моя проблема:

У меня есть кнопка сброса в форме, которая очищает все поля и штрих-коды, перечисленные в dataGridView.Когда я нажимаю на него, он получает фокус, как обычно.Когда он находится в фокусе, если я читаю штрих-код через сканер штрих-кода, новая строка в конце каждого чтения штрих-кода вызывает нажатие этой кнопки, таким образом, очищая все поля.Таким образом, считанные штрих-коды добавляются в dataGridView, но немедленно удаляются из-за активации кнопки сброса.

Мое текущее решение заключается в том, чтобы сосредоточиться на доступном только для чтения текстовом поле в конце каждой функции "button_Click", но я нехочу написать не относящуюся к делу строку в конце каждого «щелчка» функцией кнопок.Что вы порекомендуете?(кстати, я не могу предотвратить нажатие клавиши Enter в функции keydown формы)

1 Ответ

1 голос
/ 02 января 2012

Вы не можете зафиксировать клавишу Enter в событиях нажатия клавиши формы, потому что она обрабатывается кнопкой.

Если вы добавляете:

private void button_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        e.IsInputKey = true;
    }
}

к кнопке, тогда клавиша Enterне будет вызывать нажатие кнопки, и вы увидите событие Form_KeyDown для нее.

Вы не хотите добавлять это к каждой кнопке, поэтому создайте простой UserControl, который будет просто кнопкой с этимдобавлен код.

Обновление

Это не работает для пробела.Если вы установите form.KeyPreview = true и добавите:

private void form_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Space)
    {
        e.Handled = true;
    }
}

, пробел не будет нажимать кнопку, но все равно будет работать в текстовых полях.

Я не знаю, почему пробели Enter ведут себя по-разному.

...