1

在 WinForm C# 应用程序中,我有一个 Barcode_textbox。如果TextChanged我有一个 SQL 查询来检查数据库中的 TextBox.Text 值,即条形码。问题是对于每个输入的数字都会触发 SQL 查询,因此如果条码长度为 13,它将在数据库中检查 13,并且速度非常慢。

那么,什么是仅当用户停止在 TextBox 中写入(或条形码阅读器停止阅读)时触发的 TextBox 事件,或者检查数据库中的条形码的最佳解决方案是什么。请注意,bacode 的长度不同

4

5 回答 5

2

计时器是一个可怕的解决方案。

使用KeyUp事件TextBox并检查回车。大多数条形码扫描仪在代码后提交回车。如果默认情况下不这样做,他们会附带条形码来配置它。

您可以通过打开记事本并在条码后扫描条码来测试这一点。每一个都将在一个新的行上。

于 2013-04-09T23:12:00.000 回答
2

我记得我是如何成功地做到这一点的。

我将 Timer 控件放在我的应用程序中,间隔为一秒(1000 毫秒)。然后我将 Form.KeyPreview 属性设置为 True。

在 Form Key Press 事件中,我存储击键。在 Timer.Tick 事件中检查记录的击键长度是否超过 12 个字符左右。

然后触发对 SQL 的调用,一次。当您成功返回记录时(或者如果文本框包含超过 20 个字符)清除存储的击键。


请参阅截至 2019 年 3 月的更新: https ://stackoverflow.com/a/55411255/495455

于 2013-04-09T22:54:48.290 回答
1

以这种方式使用计时器,当用户在给定的一小段时间内停止在您的文本框中输入时说 1 秒,然后从数据库中获取数据......

您还可以使用计数器检查用户键入的字符,以便当它超过最小值(您的密钥可以是的最小大小)时获取数据......将节省很多时间

于 2013-04-09T23:10:32.947 回答
0

您可以使用 Validating 事件来检查 TextBox 的内容。
您的用户将需要按 TAB 键将当前焦点从 TextBox 更改为 taborder 之后的下一个控件,并且将触发验证事件

private void textBox_BarCode_Validating(object sender, CancelEventArgs e)
{
     // Code to check the barcode on the SQL database....       
     if(!ValidBarCode(textBox1.Text))
     {
           // Cancel the event and select the text to be corrected by the user.
           e.Cancel = true;
           textBox1.Select(0, textBox1.Text.Length);
     }

}

假设下一个控件是使用插入的条形码(添加)(或用于插入条形码描述的项目数量的文本框)执行某些操作的命令。过了一会儿所有的操作就变成了一个很自然的数据录入处理

于 2013-04-09T22:57:02.460 回答
0

异步查询呢?

如果您不能或想要一个简单的肮脏解决方案,那么我会坚持使用计时器

于 2013-04-09T23:00:16.757 回答