我在窗口应用程序中使用列表框,我的列表框中有一些条形码。
我想通过条形码阅读器扫描它们,然后想要将它们移动到另一个列表框中,但我无法找到任何自动触发并将条形码移动到另一个列表框的列表框事件。
答案 0 :(得分:2)
如果ListBox具有焦点,这适用于我的扫描仪:
string scannerInput = "";
private void listBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if ((int)e.KeyChar == 13)
{
listBox1.Items.Add(scannerInput );
scannerInput = "";
}
else scannerInput += e.KeyChar.ToString();
}
答案 1 :(得分:1)
大多数条形码扫描仪都会添加"运营商返回",即。 在阅读条形码后输入。
就像模拟按 Enter 键一样。
您可以尝试在表单或列表框控件上的keypress / keydown事件中捕获此 Enter (如果列表框处于焦点位置)
答案 2 :(得分:0)
具有单个控制手柄来自键盘楔的条形码扫描是有问题的。要求用户在扫描之前将焦点设置到控件上是在寻找麻烦。尝试让表单通过实现“PreviewTextInput”事件来处理扫描。
大多数键盘楔形扫描仪可以编程为发送前导码和后置码。这些应该是不可打印的ASCII字符。我用过Char(2)和Char(3)。它们是STX - 文本开头和ETX - 文本结尾。
bool InteceptBarcode = false;
string barcodeValue = string.empty;
private void Window_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
if(InteceptBarcode)
{
barcodeValue = += e.Text
e.Handled = true; //The keyboard character will stop bubbling up the control tree
}
else if (e.Text == (char)2 //Start of text character
{
InterceptBarcode = true;
barcodeValue = string.empty;
e.Handled = true;
}
else if (e.Text == {char)3) //End of text character
{
InterceptBarcode = false
e.Handled = true;
//Now do what ever you need to do on the UI.
}
else
{
e.Handled = false;
}
}