首页 > 解决方案 > 如何在不使用 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 上隐藏它)

标签: c#winformsbarcode

解决方案


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

有很多解决方法。

您可以使用您购买扫描仪的公司提供的 api,而不是楔形模式

但是,一个简单的解决方案是在扫描仪上放置前缀和后缀(如 ascii 码STXETX)(通常扫描仪会为此提供设置),这样您就知道何时拥有完整的条形码数据。

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


推荐阅读