C# 带有键盘快捷键的菜单

C# 带有键盘快捷键的菜单,c#,winforms,compact-framework,C#,Winforms,Compact Framework,我正在WindowsMobile6上开发应用程序(使用紧凑的框架)。该应用程序使用条形码扫描仪。我想在菜单中实现键盘快捷键。我在菜单中实现了一个按键事件,这样,如果用户按下1,第一个菜单项就会打开,依此类推。但我的问题是,如果用户在应用程序位于菜单中时使用设备扫描条形码,应用程序将获取扫描仪读取的条形码,并将其转换为按键。由于我在子菜单中也实现了键盘快捷键,这意味着如果用户扫描菜单中的条形码,应用程序将在菜单之间移动 我不是100%确定,但我使用的设备似乎有条形码阅读器作为“键盘楔子”,当它们是

我正在WindowsMobile6上开发应用程序(使用紧凑的框架)。该应用程序使用条形码扫描仪。我想在菜单中实现键盘快捷键。我在菜单中实现了一个按键事件,这样,如果用户按下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;
            }
    }
我尝试了不同的方法来实现它,但没有成功地解决我的问题


如果有人知道如何更改菜单中的键盘快捷键、阻止条形码阅读器或任何在上述情况下可能工作的方法,我将非常感激。

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

如果想避免对OEM特定的东西进行编码,您可以使用键盘楔位和/或预缓冲设置来解决问题


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

关闭楔形模式,并使用供应商提供的条形码SDK直接控制(并从中接收扫描事件)集成扫描器。我不能使用供应商SDK,因为应用程序需要与不同的供应商设备一起工作。由您决定,但我发现提取供应商SDK并为您需要的设备添加支持是值得的。没有那么多的数据采集设备供应商。也就是说,如果您坚持使用楔形模式,那么就按照@josef的建议使用前导码和后导码。