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