带键盘快捷键的菜单

时间:2014-02-28 12:49:46

标签: c# winforms compact-framework

我正在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;
            }
    }

我尝试过不同的方法来实现它,但没有设法解决我的问题。

如果有人知道如何更改菜单中实现的键盘快捷键,阻止条形码阅读器或任何可能在所述情况下工作的内容,我会非常感激。

1 个答案:

答案 0 :(得分:1)

是的,使用条形码扫描仪sdk将是最好的解决方案。

如果想避免编写OEM特定内容,您可以使用键盘楔形位置和/或前置设置来解决您的问题。

大多数(如果不是全部)楔形实现都支持在扫描数据之前和之后添加序列,这可以称为前导码和后置码。使用此功能,您可以更改代码,例如,如果以*开头并以#结尾,则忽略和按键。如果是这样,只需在设备的楔形设置中添加*作为前导码和#as postamble。使用这种技术,您必须先删除条形码输入字段中的字符,然后再继续验证/处理条形码数据。

相关问题