我正在尝试创建一个允许个人扫描条形码然后捕获图像的应用程序。这些事情不应该同时发生。用户应该能够仔细检查条形码扫描,然后移动到处理图像捕获的应用程序部分。
行号在以下“代码”部分的friendpaste link中引用了我的代码。
我有两个事件处理程序:一个用于条形码扫描器控件的解码事件,另一个用于通过KeyDown事件调用图像捕获控件。解码控件有自己的事件/处理程序DecodeEventHandler和一个带有枚举(lns 201和202)的触发键。但是,图像控制没有。它的文档声明Form应该有一个KeyDown事件处理程序(ln 120)和触发器键enum(ln 178)。运行应用程序(没有SelectedIndexChanged [ln 76]事件处理程序),条形码扫描仪工作得很好,但切换到选项卡(或表格,因为我也尝试了单独的表格),与图像捕获控制和点击设备上的触发键(在这种情况下为SCAN)会使掌上电脑的行为类似于仍在扫描条形码(红灯亮起,绿灯瞄准灯亮,遇到条形码时发出哔哔声)而不是使用时通常显示的行为图像控制(没有灯光,或像闪光灯一样的白灯)。
http://friendpaste.com/355cQOCghvPkE5YR29lthO
我将代码发布为friendpaste链接,因为它有点长(~230行)。如果我应该把它包含在这里,请告诉我。
提出要求,我会尽我所能!
我会标记这款霍尼韦尔Dolphin 9500,但我是新用户。
答案 0 :(得分:1)
我认为您无法访问KeyDown
处理程序的原因是,TabControl1_IndexChanged
的{{1}}是System.EventHandler
,它是{KeyDown
的通用形式1}}。
尝试做这样的事情,看看它是否正在捕捉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
}
}
答案 1 :(得分:1)
这有点像黑客,但我认为它会奏效。设置AllKeys( true );
。这应该确保您的应用程序捕获任何键盘按下。
AllKeys P / Invoke签名:http://blogs.msdn.com/b/mikefrancis/archive/2009/03/28/porting-gapi-keys-to-wm-6-1-and-6-5.aspx
听起来解码控制正在吞咽您需要的信息。您可以尝试联系HHP开发人员支持。如果他们有一个在线开发人员支持论坛也可以工作。作为测试,如果您开始评论第192-202行会发生什么?其中一行会导致你的keydown事件停止工作吗?
-PaulH
修改强>
imageControl和decodeControl都接受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;
}
}
现在只有其中一个人会根据您所在的标签观看扫描按钮。
答案 2 :(得分:0)
我发现如果我将TriggerKey更改为TK_ENTER(触发器枚举中的另一个值),我可以毫无问题地与图像控件进行交互。现在我只需找到一种方法来捕获Enter键按下以防止它做任何奇怪的事情。
感谢您的帮助!