我正在Windows Mobile 6上开发应用程序(使用紧凑的框架)。该应用程序使用条形码扫描仪。我想在菜单中实现键盘快捷键。我在菜单中实现了一个按键事件,这样如果用户按下1,则打开第一个菜单项,依此类推。但我的问题是,如果用户在应用程序位于菜单中时使用设备扫描条形码,则应用程序会获取扫描仪读取的条形码并将其转换为按键。由于我在子菜单中也实现了键盘快捷键,这意味着如果用户扫描菜单中的条形码,则应用程序在菜单之间移动。
我不是100%肯定,但似乎我使用的设备将条形码阅读器设置为“键盘楔形”,当它们就是那种时,你会从它们那里得到文本,就像用户从键盘输入一样。
这是菜单中按键的实现方式:
private void mainList_KeyPress(object sender, KeyPressEventArgs e)
{
switch (e.KeyChar)
{
case (char)Keys.D1:
productRequestBtn_Click(sender, e);
break;
case (char)Keys.D2:
warehouseBtn_Click(sender, e);
break;
case (char)Keys.D3:
inventoryBtn_Click(sender, e);
break;
case (char)Keys.D4:
ordersBtn_Click(sender, e);
break;
case (char)Keys.D5:
discountBtn_Click(sender, e);
break;
case (char)Keys.D6:
intakeBtn_Click(sender, e);
break;
case (char)Keys.F1:
Close();
break;
}
}
我尝试过不同的方法来实现它,但没有设法解决我的问题。
如果有人知道如何更改菜单中实现的键盘快捷键,阻止条形码阅读器或任何可能在所述情况下工作的内容,我会非常感激。
答案 0 :(得分:1)
是的,使用条形码扫描仪sdk将是最好的解决方案。
如果想避免编写OEM特定内容,您可以使用键盘楔形位置和/或前置设置来解决您的问题。
大多数(如果不是全部)楔形实现都支持在扫描数据之前和之后添加序列,这可以称为前导码和后置码。使用此功能,您可以更改代码,例如,如果以*开头并以#结尾,则忽略和按键。如果是这样,只需在设备的楔形设置中添加*作为前导码和#as postamble。使用这种技术,您必须先删除条形码输入字段中的字符,然后再继续验证/处理条形码数据。