0

我有一个条形码扫描应用程序,它在文本框的文本更改事件上运行。它验证条形码是否先前被扫描到访问数据库中并相应地验证用户。

我有一个问题,在文本框中看到的数字只是条形码读取的一个数字(第一个数字)。

这个问题是因为文本更改属性被立即验证了吗?

代码如下

private void textBox1_TextChanged(object sender, EventArgs e)
    {
        textBox1.SelectAll();
        OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\dell\Documents\Database5.accdb;Jet OLEDB:Database Password=sudeep;");
        con.Open();
        try
        {
        //    con.Open();
             OleDbCommand cmd = new OleDbCommand("insert into barcode(id,dtime) values('" + textBox1.Text + "','"+label3.Text+"')",con);
            cmd.ExecuteNonQuery();
            label2.Text = "User Authenticated";
            label2.ForeColor = Color.Green;
            //MessageBox.Show("User Authenticated");

        }

        catch(Exception)
        {
            label2.Text = "User Already registered";
            label2.ForeColor = Color.Red;
           // MessageBox.Show(x.ToString());


        }

请帮忙。

我认为问题在于文本框不扫描条形码的字符串,因为由于文本更改事件属性,只有一个字符被扫描并存储在数据库中。有没有办法从条形码中扫描字符串?

4

2 回答 2

2

Usually these barcode scanners send keyboard events and indeed cause the event to be raised for each digit separately.

You should see if the barcode scanner terminates the scan with a separate key, for instance the enter key, and catch the OnKeyDown event instead. Alternatively, if the barcode is of a fixed length, you could check the length of the TextBox.Text property before acting on it.

于 2013-09-26T14:05:40.620 回答
2

您不想挂钩按键,因为您会遇到刚刚看到的问题。

相反,您需要找出扫描仪发送的其他内容。大多数情况下,扫描仪会在数据之后发送 CR/LF。这允许您在表单上有一个按钮,您将其指定为默认按钮以接受“输入”键并从它的 onclick 事件中运行您的逻辑。

我所说的“大多数”是指您在市场上找到的几乎所有不是为不这样做而定制的扫描仪。

于 2013-09-26T14:17:40.153 回答