c# - 条形码扫描仪发送以换行符结尾的数据时如何使按钮散焦

标签 c# button focus barcode-scanner

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

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

我目前的解决方案是在每个“button_Click”函数的末尾关注一个只读文本框,但我不想在按钮的每个“单击”函数末尾写一个不相关的行。你有什么建议吗? (顺便说一下,我无法阻止在表单的 keydown 函数中按下回车键)

最佳答案

您无法在表单的击键事件中捕获 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 的行为不同。

关于c# - 条形码扫描仪发送以换行符结尾的数据时如何使按钮散焦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8702317/

相关文章:

c# - 在运行时创建类型 "MyClass : OtherClass<MyClass> { }"?

c# - 有用或不重要的双重接口(interface)的例子

jquery - 用于 web 的 Facebook 登录自定义 UI 按钮

java - JFrame 在图标化时监听 KeyEvent

c# View 调用 Angular 组件中断,但直接调用 Angular 工作正常

java - 仅使用 +、- 和递归检查数字是否为偶数

c# - 边框内的按钮

单击 javascript 按钮和单击 asp.net 按钮

html - 如何防止链接显示在 :focus/:active from auto-clicking on a touch screen? 上

css - 选择:焦点{宽度:自动;}