How to capture whole Barcode value on Winform without using TextChanged event?

时间秒杀一切 提交于 2019-11-28 01:15:17

This is a result of the scanner in WedgeMode. basically it acts as a keyboard and every character scanned creates a text changed event.

There are many solves.

You could use an api supplied by the company you bought the scanner off, instead of wedgemode

However, a simple solve is to put a prefix and suffix (like the ascii codes, STX and ETX ) on the scanner (there are usually settings for this supplied by the scanner), that way you know when you have complete bar-code data.

When you see a valid barcode, then you make one event, not an event for each character scanned.

You'll probably see a few of my answers on this topic.

Improve Barcode search in a Textbox C#

distinguish between the scanner and the keyboard

Barcode scanner with a WPF application

If I was to do it again and the first time was a long time ago, I'd opt for RawInput's and determine which device is the BarCode scanner. Using prefix and suffix are reliable although they vary depending on the device. Capturing the raw input abstracts this hardware implementation.

Code Project article and download: Using Raw Input from C# to handle multiple keyboards

See how I can get input from any source so I dont even need the user to put a cursor on a textbox or use Form.KeyPreview I can get the input filtered by device.

You could try to let the event wait for 1 second, or long enough to finish scanning

private async void txt_Barcode_TextChanged(object sender, EventArgs e)
{
    await Task.Delay(1000);
    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();
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!