在 WinForm C# 应用程序中,我有一个 Barcode_textbox。如果TextChanged
我有一个 SQL 查询来检查数据库中的 TextBox.Text 值,即条形码。问题是对于每个输入的数字都会触发 SQL 查询,因此如果条码长度为 13,它将在数据库中检查 13,并且速度非常慢。
那么,什么是仅当用户停止在 TextBox 中写入(或条形码阅读器停止阅读)时触发的 TextBox 事件,或者检查数据库中的条形码的最佳解决方案是什么。请注意,bacode 的长度不同
计时器是一个可怕的解决方案。
使用KeyUp
事件TextBox
并检查回车。大多数条形码扫描仪在代码后提交回车。如果默认情况下不这样做,他们会附带条形码来配置它。
您可以通过打开记事本并在条码后扫描条码来测试这一点。每一个都将在一个新的行上。
我记得我是如何成功地做到这一点的。
我将 Timer 控件放在我的应用程序中,间隔为一秒(1000 毫秒)。然后我将 Form.KeyPreview 属性设置为 True。
在 Form Key Press 事件中,我存储击键。在 Timer.Tick 事件中检查记录的击键长度是否超过 12 个字符左右。
然后触发对 SQL 的调用,一次。当您成功返回记录时(或者如果文本框包含超过 20 个字符)清除存储的击键。
请参阅截至 2019 年 3 月的更新: https ://stackoverflow.com/a/55411255/495455
以这种方式使用计时器,当用户在给定的一小段时间内停止在您的文本框中输入时说 1 秒,然后从数据库中获取数据......
您还可以使用计数器检查用户键入的字符,以便当它超过最小值(您的密钥可以是的最小大小)时获取数据......将节省很多时间
您可以使用 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);
}
}
假设下一个控件是使用插入的条形码(添加)(或用于插入条形码描述的项目数量的文本框)执行某些操作的命令。过了一会儿所有的操作就变成了一个很自然的数据录入处理
异步查询呢?
如果您不能或想要一个简单的肮脏解决方案,那么我会坚持使用计时器