Honeywell Dolphin 9500(Pocket PC 2003)C#事件处理冲突?
-
25-10-2019 - |
题
环境
- 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;
}
}
现在,只有其中一个会根据您的标签观看扫描按钮。