【问题标题】:Improve Barcode search in a Textbox C#改进文本框 C# 中的条码搜索
【发布时间】:2013-04-01 14:10:20
【问题描述】:

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

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

【问题讨论】:

  • 添加一个带有“检查有效性”文本的按钮不是一个选项?
  • 除了史蒂夫的建议,你可以听Enter键吗?
  • 这不是最优的,想象一下超市里的这个软件。每次从条形码阅读器读取时,单击按钮会很耗时!
  • 每次查询多少条条码记录?如果计数很小(例如几百或几千),您可以查询所有记录一次并将它们存储在本地数组中。这将允许您尽可能频繁地查询,因为它会非常快。我们将这种策略用于“国家/地区”文本框,但它只有 200 多条记录。
  • 自从你提到超市,你还有什么其他限制吗?例如,它是触摸屏,还是运行您的应用程序的设备可以使用键盘和鼠标等设备?

标签: c# sql winforms textbox


【解决方案1】:

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

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

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

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


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

【讨论】:

  • 另外一个是取消定时器,在textchanged事件中启动。这样,计时器将在“用户停止输入后 1 秒”触发。这当然意味着用户必须每秒至少键入一个字符才能使 sql 查询不触发。
  • 为什么为什么为什么?!计时器是一个非常糟糕的解决方案。
  • 因为是VB6。我想拒绝使用 Timer,这里的珍珠是 Form.KeyPreview 技巧。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      异步查询怎么样?

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

      【讨论】:

        【解决方案5】:

        您可以使用 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);
             }
        

        }

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-23
          • 2015-08-31
          • 2015-07-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多