【问题标题】:Textbox can't scan many number, just can Scan one number Barcode only文本框不能扫描多个数字,只能扫描一个数字条形码
【发布时间】:2019-01-29 13:00:47
【问题描述】:

当我扫描条形码时,它只显示数据库中的一个数字条形码。我的其他长号条码没有显示出来

private void textBox4_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {

                if ((e.KeyCode != Keys.Enter) || (textBox4.Text.Length == 0))
                {
                    return;
                }

                conn = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=F:\Database\book1.mdf;Integrated Security=True;Connect Timeout=30");
                conn.Open();
                SqlDataAdapter adp = new SqlDataAdapter("SELECT productid,ProductName,Description,Stock,UOM,Price from ProductTable where productId='" + textBox4.Text + "'", conn);
                DataTable dt = new DataTable();
                adp.Fill(dt);

                foreach (DataRow item in dt.Rows)
                {
                    int i = dataGridView1.Rows.Add();
                    DataGridViewRow row = dataGridView1.Rows[i];
                    row.Cells[0].Value = item[0].ToString();
                    row.Cells[1].Value = item[1].ToString();
                    row.Cells[2].Value = item[2].ToString();
                    row.Cells[3].Value = item[3].ToString();
                    row.Cells[4].Value = item[4].ToString();
                    row.Cells[5].Value = item[5].ToString();
                }
                conn.Close();    
            }
            textBox4.Text=" ";
        }

页面截图:

-https://ibb.co/xHsg198

【问题讨论】:

  • 你想完成什么?
  • 我只想扫描多位数字条码
  • 如果您使用 KeyDown 事件 - 您可能会在条形码中的每个字符中获得一个事件。您可以等到从条形码阅读器收到终止字符(如果有)。或者等到按钮被点击。

标签: c# barcode barcode-scanner keydown


【解决方案1】:

删除线

textBox4.Text=" ";

因为它会擦除您的条形码数字。当条形码扫描完成并发送Keys.Enter 时,文本框只包含一位数字。

如果您需要在搜索后清除文本框,请将此行放在条件语句的末尾

private void textBox4_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        //...
        conn.Close();
        textBox4.Text=" ";
    }
}

【讨论】:

  • 如果删除 textBox4.Text=" ";该程序将仅将一项扫描到数据网格,而无法将第二项扫描到它
【解决方案2】:

就像@Alexander 所说,删除:

textBox4.Text = " ";

您还可以将捕获的事件更改为 textBox4_Validated,这将在离开 textBox 后发生(您可以离开 KeyDown,并且只捕获 Enter 键以强制验证 textBox)。

如果您的目标只是数字代码,您可以添加一个测试来验证它是否真的只有数字。

另一个提示,如果您可以对扫描仪进行编程,则应在扫描的字符串末尾添加一个特定的字符(如 '\n' 或任何您知道的永远不会出现在真实代码中的字符)。像这样你可以连续扫描所有代码,然后拆分最后的字符串并在 foreach 中执行代码。

最后一点,这在这里并不重要,当您像这里一样抓住按键只是为了执行一些代码并且您不希望该按键被有效地添加到您的文本框中,否则,添加这个:

e.SuppressKeyPress = true;
e.Handled = true;

我不确定这是做什么的,但如果我理解得好,第一行将表明 keyPress 变得好像从未发生过,第二行告诉系统 keyPress 已被正确使用和处理,所以它不必再与它交互了。

希望这有帮助

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多