关注点

  • 1、扫描枪在扫描到条码后会在有焦点的地方显示扫描到的条码并且可设置扫码后添加回车换行让我很尴尬
  • 2、怎样拦截扫码输入,扫描到条码就自动会嘀一声。不要这么智能行不行。瞎BB

需求详解

公司生产车间要上几条线的过程管控系统,由于没办法实现先进的自动化,全是用手持扫描枪USB接口的那种来作业,来识别产品半成品的标识,进行记录和管控。方便实现追溯。前人都是拖控件,拖个TextBox就了事,在KeyPress里收到回车换行就认为是一次扫描操作。去年搞了一年多的综合赋码软件,对软件的动态编译、和界面脚本分离的做法深深折服,于是随便参考一把,搭建了自己的业务应用框架。这里讲一下其中一点心得就是关于这个小事情的处理。

实现方式说明

 /// <summary>
/// 响应扫描枪输入
/// </summary>
/// <param name="msg"></param>
/// <param name="keyData"></param>
/// <returns></returns>
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (msg.Msg == 0x0100 && ContextMenuStrip != null)
{
foreach (ToolStripMenuItem item in ContextMenuStrip.Items)
{
if (keyData == item.ShortcutKeys)
{
item.PerformClick();
}
}
}
if (msg.Msg == 0x0100 && keyData == Keys.Enter)
{
string barcode = onceScanData;
onceScanData = string.Empty;
if (CoreFlowObj != null && FlowContext.Instance.WorkStatus == WorkStatus.Running && !string.IsNullOrEmpty(barcode))
{
CoreFlowObj.OnExecScanReceiving(TrimSpecialChar(barcode));
}
else
OnScanReceivingData(TrimSpecialChar(barcode));
}
else
{
int key = (int)keyData;
if (key >= (int)Keys.A && key <= (int)Keys.Z ||
key >= (int)Keys.D0 && key <= (int)Keys.D9 ||
key >= (int)Keys.NumPad0 && key <= (int)Keys.NumPad9 ||
key > )
{
#region 无赖,希望找到更好的办法
if (keyData == Keys.NumPad0)
keyData = Keys.D0;
if (keyData == Keys.NumPad1)
keyData = Keys.D1;
if (keyData == Keys.NumPad2)
keyData = Keys.D2;
if (keyData == Keys.NumPad3)
keyData = Keys.D3;
if (keyData == Keys.NumPad4)
keyData = Keys.D4;
if (keyData == Keys.NumPad5)
keyData = Keys.D5;
if (keyData == Keys.NumPad6)
keyData = Keys.D6;
if (keyData == Keys.NumPad7)
keyData = Keys.D7;
if (keyData == Keys.NumPad8)
keyData = Keys.D8;
if (keyData == Keys.NumPad9)
keyData = Keys.D9;
#endregion
onceScanData += (char)keyData;
}
}
if (FlowContext.Instance.WorkStatus != WorkStatus.Running)
return base.ProcessCmdKey(ref msg, keyData);
else
return true;
}
简单说就是重写ProcessCmdKey事件拦截处理扫描的输入。不直接在界面控件的事件里处理,把界面的TextBox都设置成ReadOnly,在窗体的ProcessCmdKey里处理。然后把收到的条码传给脚本进行解析。

Winform让扫描枪听话,防止在有焦点的地方就扫码输入的尴尬的更多相关文章

  1. 获取键盘输入或者USB扫描枪数据

    /// <summary> /// 获取键盘输入或者USB扫描枪数据 可以是没有焦点 应为使用的是全局钩子 /// USB扫描枪 是模拟键盘按下 /// 这里主要处理扫描枪的值,手动输入的 ...

  2. Android PDA扫描枪广播接搜条码并使用

    在开发扫描枪扫码接收广播条码的时候,由于厂商如shit般的文档和对Anroid基础知识的缺失,走了一些弯路,以下是广播接收条码并使用的代码实现 : 1 : 动态注册广播 PDA扫描枪对扫码有强大支持, ...

  3. C# Winform中无焦点状态下获取键盘输入或者USB扫描枪数据

    类文件: C#类文件 using System; using System.Collections.Generic; using System.Text; using System.Runtime.I ...

  4. WinForm中TextBox 中判断扫描枪输入与键盘输入

    本文转载:http://www.cnblogs.com/Hdsome/archive/2011/10/28/2227712.html 提出问题:在收货系统中,常常要用到扫描枪扫描条码输入到TextBo ...

  5. PDA 收银系统PDA手持打印扫描枪 销售开单 收银 扫描打印一体机

    在零售方面也有很好的应用.如在一些高端品牌零售店,营业员可以随身导购,一站式完成了商品销售和收银,很是受消费者追捧,符合了企业对客户体验以及行业领先的追求. PDA收银系统是一款多功能可以取代专业收银 ...

  6. 什么是智能扫描开单打印进销存POS?安卓工业手持PDA设备上的POS销售开单,现场打印打票,用扫描枪太方便了

    安卓PDA版POS销售开单如果和扫描枪配合使用,和超市的POS销售一样的操作 什么是智能扫描开单打印进销存POS? 互联网特性,让它在数据统计分析.客户关系管理等方面表现出众.智能POS,不仅是一个收 ...

  7. SilverLight 条码 扫描枪 MVVM(转载)

    目前做SL项目时,遇到条码的问题. 客户需要通过条码来加快工作效率以及减少错误.有条码,自然便引入扫描枪这个东西.不解释. 关键点是:扫描枪每次扫描完毕会触发回车 这是解决问题的关键! 现有两种情景: ...

  8. 【转】C#中判断扫描枪输入与键盘输入

    提出问题:在收货系统中,常常要用到扫描枪扫描条码输入到TextBox,当条码无法扫描时,需要手工输入.如果是扫描枪输入时,我们将自动去判读条码,而手工输入时,最终需要加按回车键确认后判读条码.这时候我 ...

  9. web中使用扫描枪

    扫描枪实际上就是一输入设备,只不过它每次在输入的内容后面添加一个回车.因此在web中可以使用js监听回车事件.处理代码如下: jQuery(function() {        jQuery(doc ...

随机推荐

  1. Python迭代和解析(1):列表解析

    解析.迭代和生成系列文章:https://www.cnblogs.com/f-ck-need-u/p/9832640.html Python中的解析 Python支持各种解析(comprehensio ...

  2. C#单例模式的几种实现方式

     一.多线程不安全方式实现 public sealed class SingleInstance { private static SingleInstance instance; private S ...

  3. Java集合类:"随机访问" 的RandomAccess接口

    引出RandomAccess接口 如果我们用Java做开发的话,最常用的容器之一就是List集合了,而List集合中用的较多的就是ArrayList 和 LinkedList 两个类,这两者也常被用来 ...

  4. SpringMVC进行文件上传

    进行文件上传前需要添加相应的依赖 在xml文件中进行相应的文件上传解析器的配置 注意:这里有个坑,因为没注意,再排查错误的时候花了一点时间.就是给bean的id一定要是. 否者就会报如下的错误:

  5. @RequestParam Map<String, Object> paramMap

    @RequestParam 请求方式 url = "/edit?device=${device}&type=${type}" Controller @RequestMapp ...

  6. 为什么选择 Intellij IDEA 作为日常开发工具

    作为一个从事 Java 开发的程序员,每天离不开编辑器的帮助.还记得刚开始学习 Java 编程的时候,使用 Eclipse 作为日常开发工具.后来工作以后,需要使用 Intellij IDEA,刚开始 ...

  7. es6 Module语法

    export 命令 1.概念 export用于定义要输出的变量(let.var.const.function.class),定义的变量与值是动态绑定关系. 2.命令格式 1. export 变量定义 ...

  8. 可视化设计,类Excel的快速开发平台

    活字格Web应用生成器,是可视化设计,类Excel的快速开发平台,接下来给大家介绍如何体现这些特点. 一.可视化设计 网页系统的开发,包含UI设计+代码编写的工作,最终形成网页系统.这要求系统开发人员 ...

  9. 设计模式系列之过滤器模式(Chriteria Pattern)

    过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来.这种类 ...

  10. .net 支付宝接口小小误区

    1.该密匙目测不是私钥,应用官方文档生成的长私钥. 2. 此公钥用的是应用公钥 3.设置支付完成后的通知页面和回调页面 其他的按照官方文档的demo来实现即可