new*_*per 6 c# barcode winforms
当在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();
}
Run Code Online (Sandbox Code Playgroud)
我愿意使用文本框捕获Form1上的条形码(我将其隐藏在UI中)
这是扫描仪处于WedgeMode模式的结果。基本上,它充当键盘,并且扫描的每个字符都会创建一个文本更改事件。
有很多解决方案。
您可以使用购买扫描仪的公司提供的api代替楔模式
但是,一个简单的解决方法是在扫描仪上放置一个前缀和后缀(如ascii码STX和ETX)(通常由扫描仪提供此设置),这样您就可以知道完整的条形码数据。
当您看到有效的条形码时,您将发生一个事件,而不是每个扫描字符的事件。
您可能会看到我关于这个主题的一些答案。
如果我再做一次,第一次是很久以前的事了,我会选择 RawInput 并确定哪个设备是条形码扫描仪。使用前缀和后缀是可靠的,尽管它们因设备而异。捕获原始输入抽象了该硬件实现。
代码项目文章和下载:使用 C# 中的原始输入处理多个键盘
了解如何从任何来源获取输入,这样我什至不需要用户将光标放在文本框上,或者使用Form.KeyPreview我可以获取按设备过滤的输入。
| 归档时间: |
|
| 查看次数: |
920 次 |
| 最近记录: |