c# - 如何在不使用 TextChanged 事件的情况下在 Winform 上捕获整个 Barcode 值?
问题描述
当在 form1 上扫描条形码时,我会调用数据库以获取此条形码的项目并使用预先填充的数据打开 form2。
如果我使用文本更改事件,那么它会产生与一个条形码中的数字一样多的次数。
我无法检查条形码的长度,因为它可能每次都不同。
扫描条形码时,我应该使用哪个事件只拨打一个电话?
我尝试了 TextChanged、KeyPress、KeyDown 事件,但它们都被多次调用。
private void txt_Barcode_TextChanged(object sender, EventArgs e)
{
con.Open();
GenerateInvoice gn = new GenerateInvoice();
string query = "SELECT * FROM dbo.Inventory WHERE Barcode = '" + txt_Barcode.Text + "' ";
SqlCommand cmd = new SqlCommand(query, con);
SqlDataReader dr = cmd.ExecuteReader();
while (DR1.Read())
{
gn.txt_Barcode.Text = dr["Barcode"].ToString();
gn.txt_ProductName.Text = dr["ProductName"].ToString();
gn.txt_Price.Text = dr["SellingPrice"].ToString();
gn.txt_QTY.Text = 1.ToString();
gn.txt_Total.Text = dr["SellingPrice"].ToString();
}
con.Close();
}
我愿意使用文本框来捕获 form1 上的条形码(我将在 UI 上隐藏它)
解决方案
这是 WedgeMode 扫描仪的结果。基本上它充当键盘,扫描的每个字符都会创建一个文本更改事件。
有很多解决方法。
您可以使用您购买扫描仪的公司提供的 api,而不是楔形模式
但是,一个简单的解决方案是在扫描仪上放置前缀和后缀(如 ascii 码STX
和ETX
)(通常扫描仪会为此提供设置),这样您就知道何时拥有完整的条形码数据。
当您看到一个有效的条形码时,您会创建一个事件,而不是为每个扫描的字符创建一个事件。
推荐阅读
- css - 如何将所有文本框对齐在一行中
- javascript - 为什么响应发送了两个标头?
- c# - 桌面应用程序的单向部分表同步
- vba - 仅当满足某些条件时,如何在 VBA 中弹出输入框?
- c# - xsd.exe 生成的文件没有基本类型
- pdf - 更改 PDF 阅读器中的 Firefox 后退按钮以带您返回上一个网页而不是 PDF 的第一页
- python-3.x - 使用 Pytest 进行单元测试时断言值 None 错误
- jenkins - 在 Jenkins Pipeline 的一个步骤中添加多个阶段
- java - 将 Java 7 更新为 Unlimited Strength Jurisdiction Policy 有哪些潜在问题?
- vue.js - 通过 Vue Router 渲染 html 文件