改进文本框中的条形码搜索

本文关键字:条形码 搜索 文本 | 更新日期: 2023-09-27 18:08:34

在winformc#应用程序中,我有一个Barcode_textbox。在TextChanged事件中,我有一个SQL查询来检查文本框。数据库中的文本值,即条形码。问题是,对于每个输入的数字,SQL查询将被触发,所以如果条形码长度为13,它将在数据库中进行13检查,这是非常慢的。

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

改进文本框中的条形码搜索

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

我把定时器控制在我的应用程序与一秒的间隔(1000毫秒)。然后我设置表单。KeyPreview属性设置为True

在Form Key Press事件中,我存储了按键。在定时器中。打勾事件检查记录的击键长度是否超过12个字符左右。

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


查看更新,截至2019年3月:https://stackoverflow.com/a/55411255/495455

计时器是一个糟糕的解决方案。

使用TextBoxKeyUp事件并检查是否有回车。大多数条形码扫描器在代码后提交回车。如果他们默认不这样做,他们会附带条形码来配置它。

您可以通过打开记事本并逐个扫描条形码进入它来测试这一点。

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

你也可以用计数器检查用户输入的字符,这样当它超过最小值(你的键可以是最小大小)时,得到数据…会节省很多时间

您可以使用valididating事件来检查TextBox的内容。
您的用户将需要按TAB键将当前焦点从文本框更改到表序后面的下一个控件,并且将触发验证事件

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);
     }

}

假设下一个控件是使用插入的条形码(Add)执行某项操作的命令(或者是插入条形码描述的商品数量的textBox)。过了一会儿,所有的操作都变成了非常自然的数据输入处理

异步查询怎么样?

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