我正在编写一个 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/