环境

  • Windows XP X32 Visual Studio 2005标准版
  • Honeywell Dolphin 9500运行Windows Mobile 2003(Pocket PC 2003)
    • 内置条形码扫描仪和B&W相机
    • 使用他们的SDK 这里.
  • .NET紧凑型框架1.0 SP3和.NET框架1.1
  • 使用VC#

目标

我正在尝试创建一个应用程序,该应用程序允许个人扫描条形码然后捕获图像。这些事情不应该同时发生。用户应能够仔细检查条形码扫描,然后移至处理图像捕获的应用程序的部分。


问题

行号在 Friendpaste链接 在下面的“代码”部分中。

我有两个事件处理程序:一个是从条形码扫描仪控件中进行解码事件的一个,另一个是通过键盘事件调用图像捕获控件的。解码控件具有自己的事件/处理程序解码器和带有枚举的触发键集(LNS 201和202)。但是,图像控制没有。它的文档指出该表格应具有键盘事件处理程序(LN 120)和触发键枚举(LN 178)。在运行应用程序(没有SelectedIndexChanged [LN 76]事件处理程序)后,条形码扫描仪的运行效果很好,但是使用图像捕获控制和图像捕获控制和键入设备上的触发键(在这种情况下进行扫描)会导致手持式行为就像仍在扫描条形码(红灯亮起,绿色AIM灯是显示的,遇到条形码时哔哔声),而不是通常在使用时显示的行为图像控制(无灯或白色灯光像闪光灯)。


我尝试过的事情

  • 重要的: 如果我从应用程序中删除解码控件,则图像控件可行。如果我仅使用图像控件构建单独的应用程序,则可以正常工作。
  • 我在第210行中提出了一个突破点,发现关键事件永远不会受到打击。在这一点上,我尝试以某种方式将事件处理程序或控件隔离开来,因此我介绍了选项卡控件的selectionIndexchanged事件处理程序,然后使用适当的控件切换到选项卡后,我尝试删除事件处理程序。我能够删除解码器处理程序,但仍然无法击中我写的密钥down事件处理程序代表。
  • 霍尼韦尔SDK的解码和图像控件都具有“断开”事件,这些事件(引用文档)“与扫描引擎断开连接”。因此,我尝试根据我要切换到哪个选项卡进行断开和重新连接控件,但在此方面也没有成功。
  • 我还读到某个地方,如果形式失去焦点,有时会破坏形式事件。因此,我实现了form.lostcontrol事件/处理程序,然后放入this.focus()以返回焦点为表格,但无济于事。
  • 我遇到了多个建议键盘= true的人,并在表单级别上处理/委派事件。似乎.NET Compact Framework版本1没有实现此功能,因为我的表单对象没有键盘浏览成员。
  • 在TriggerKey枚举(示例202中的示例)中,设备上的Enter键有一个枚举。我尝试将其接线到图像控件,并扫描到解码器控件,但仍无法达到键盘事件。

代码

http://friendpaste.com/355cqocghvpke5yr29ltho

我将代码作为friendpaste链接发布,因为它有点长(〜230行)。让我知道我是否应该在这里包含它。


需要其他信息吗?

问问,我会尽力而为!

我本来会标记这款Honeywell Dolphin 9500,但我是新用户。

有帮助吗?

解决方案 3

我发现,如果将TriggerKey更改为TK_Enter(TriggerKey Enum中的另一个值),则可以与图像控件进行交互,而无需任何问题。现在,我只需要找到一种捕获输入密钥媒体的方法,以防止它做任何奇怪的事情。

感谢您的帮助!

其他提示

我认为您无法进入的原因 KeyDown 处理程序是那个 TabControl1_IndexChanged 是一个 System.EventHandler 这是一种通用形式 KeyDown.

尝试做这样的事情,看看它是否正在抓住 KeyDown

private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
   if (sender is Form1 && e is KeyEventArgs)
   {
       Form1_KeyDown(sender,  (KeyEventArgs) e);
   }
   else
   {
       //Do other stuff
   }

}

这有点黑客,但我认为它会起作用。放 AllKeys( true );. 。这应该确保您的应用程序捕获任何键盘按下。

Allkeys P/Indoke签名: http://blogs.msdn.com/b/mikefrancis/archive/2009/03/28/porting-gapi-keys-to-wm-6-1-and-6-5.aspx

通用Allkeys信息: http://windowsteamblog.com/windows_phone/b/windowsphone/archive/2009/07/14/just-say-no-no-to-gapi---------------管理

听起来,解码控件正在吞咽所需的消息。您可以尝试联系HHP开发人员支持。如果他们有一个在线开发人员支持论坛,也可能有效。作为测试,如果您开始评论第192-202行,会发生什么?这些行之一会导致您的关键事件停止工作吗?

-paulh

编辑

想象力控制和解码控制都接受 TriggerKey 范围。听起来他们期望进行按键活动来处理自己。

尝试一下:只能根据您使用的标签进行实例化的一个实例化。摆脱 Form1_KeyDown 一起处理代码(包括Allkeys)。看看是否有效。

或者,您仍然可以杀死您的 Form1_KeyDown 处理程序,但像它们一样保持两个控件,并在您的 tabControl1_SelectedIndexChanged 处理程序:

private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
    if (this.tabControl1.SelectedIndex == 0)
    {
        this.decodeControl1.TriggerKey = HHP.DataCollection.Common.TriggerKeyEnum.TK_ONSCAN;
        this.imageControl1.TriggerKey = null;
    }
    else if (this.tabControl1.SelectedIndex == 1)
    {
        this.decodeControl1.TriggerKey = null;
        this.imageControl1.TriggerKey = TriggerKeyEnum.TK_ONSCAN;
    }
}

现在,只有其中一个会根据您的标签观看扫描按钮。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top