当条形码扫描器发送以换行符结尾的数据时,如何对按钮进行散焦

时间:2012-01-02 15:03:27

标签: c# button focus barcode-scanner

我正在编写一个C#条形码应用程序。我有一个EAN-13正则表达式来检测“Form1_KeyPress”函数中的条形码。我没有机制来检测输入来自何处。这是我的问题:

我在表单中有一个重置按钮,用于清除dataGridView中列出的所有字段和条形码。当我点击它时,它会正常聚焦。当它具有焦点时,如果我通过条形码扫描仪读取条形码,则每个条形码读取结束时的换行符会导致单击此按钮,从而清除所有字段。所以读取的条形码被添加到dataGridView,但由于激活了重置按钮而立即被删除。

我目前的解决方案是专注于每个“button_Click”函数末尾的只读文本框,但我不想在按钮的每个“单击”功能结束时写一条不相关的行。您有什么推荐的吗? (顺便说一句,我无法阻止surpress在表单的keydown函数中输入键)

1 个答案:

答案 0 :(得分:1)

您无法在表单的按键事件中捕获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;
    }
}

然后空格键不会按下按钮,但它仍然可以在文本框中工作。

我不知道为什么Space和Enter表现不同。