c# - 如何在不使用 TextChanged 事件的情况下在 Winform 上捕获整个条码值?

标签 c# winforms 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 上隐藏它)

最佳答案

这是楔形模式下扫描仪的结果。基本上它充当键盘,扫描的每个字符都会创建一个文本更改事件。

有很多解决方法。

您可以使用您购买扫描仪的公司提供的 API,而不是 wedgemode

然而,一个简单的解决办法是在扫描仪上放置一个前缀和后缀(如 ascii 代码、STXETX)(通常提供此设置)通过扫描仪),这样您就可以知道何时拥有完整的条形码数据。

当您看到一个有效的条形码时,您就创建了一个事件,而不是为扫描的每个字符创建一个事件。

关于c# - 如何在不使用 TextChanged 事件的情况下在 Winform 上捕获整个条码值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55410799/

相关文章:

c# - 如何使用 http 请求调用 ApiController 中的方法?

c# - 如何阻止 JIT 调试器介入崩溃的 wcf 服务?

c# - 如何以编程方式将节点添加到 TreeView ?

c# - 带控件的基本 UserControl - 派生控件中的对齐不正确

excel - 使用 VBA 从网页复制特定图像并粘贴到 Excel 中

java - 如何在代码中添加 BarcodeFragment?

javascript - 将数值导出为 JSPDF 中的条形码

c# - LINQ vs Lambda vs 匿名方法 vs 委托(delegate)

C# winforms向动态创建的标签页添加控件

C# 从 get 返回一个只读变量;放;