关注点

  • 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. .Net语言 APP开发平台——Smobiler学习日志:获取或存储图像路径设置

    ResourcePath属性 一.属性介绍 获取或设置图像存储路径,默认设置为“image”,表示的ResourcePath是在程序运行路径下的Image文件夹(bin\Debug\Image): 该 ...

  2. 第48章 UserInfo端点(UserInfo Endpoint) - Identity Server 4 中文文档(v1.0.0)

    UserInfo端点可用于检索有关用户的身份信息(请参阅规范). 调用者需要发送代表用户的有效访问令牌.根据授予的范围,UserInfo端点将返回映射的声明(至少需要openid作用域). 示例 GE ...

  3. [MySQL] explain中的using where和using index

    1. 查看表中的所有索引 show index from modify_passwd_log;  有两个 一个是id的主键索引 , 一个是email_id的普通索引 2. using index表示 ...

  4. [Go] Go的WaitGroup计数信号量

    WaitGroup是一个计数信号量,可以用来记录并维护运行的goroutine,如果WaitGroup的值大于0,Wait方法就会阻塞 调用Done方法来减少WaitGroup的值,并最终释放main ...

  5. 经典面试题:浏览器是怎样解析CSS的?

    摘要: 理解浏览器原理. 解析 一旦 CSS 被浏览器下载,CSS 解析器就会被打开来处理它遇到的任何 CSS.这可以是单个文档内的 CSS.<style>标记内的 CSS,也可以是 DO ...

  6. elementui el-upload 在v-for里使用时 如何获取index

    <div v-for = 'item in list'> <div @click="getImageTypeIndex(index)"> <el-up ...

  7. Python浅谈requests三方库

    requests 三方库用于获取URL资源 1.GET请求访问一个页面 import requests r = requests.get('https://www.cnblogs.com/xqxacm ...

  8. python爬虫实战:利用scrapy,短短50行代码下载整站短视频

    近日,有朋友向我求助一件小事儿,他在一个短视频app上看到一个好玩儿的段子,想下载下来,可死活找不到下载的方法.这忙我得帮,少不得就抓包分析了一下这个app,找到了视频的下载链接,帮他解决了这个小问题 ...

  9. linux下可执行bin程序提示not found/no such file or directory/not executable

    我们经常在执行二进制bin程序时,会遇到提示not found/no such file or directory/not executable等错误信息,在什么情况下会出现这种问题呢,我们一起罗列下 ...

  10. ASP.NET Zero--前端应用程序

    前端应用程序 ASP.NET Zero包含可以作为您的公共网站或应用程序着陆页的起点的前端页面.首次运行项目时,您会看到主页如下所示: 这里有两页:主页和关于.这些页面的内容只是占位符和演示目的.您可 ...