Winform让扫描枪听话,防止在有焦点的地方就扫码输入的尴尬
1.贡献个Winform自定义控件,信用卡、银行卡输入控件;每4个字符分隔显示。其他UI框架可以参考。2.印章WinForm自定义控件封装,提供源码下载3.Windows高速定时器,多媒体定时器winmm.dll库的使用4.理解SynchronizationContext,如何在Winform里面跨线程访问UI控件5.C#winform程序关闭计算机的正确姿势6.WinForm触摸屏程序功能界面长时间不操作自动关闭回到主界面7.分享Winform datagridview 动态生成中文HeaderText
8.Winform让扫描枪听话,防止在有焦点的地方就扫码输入的尴尬
9.WinForm调用钉钉获取考勤结果10.C# Winform 实现Ajax效果自定义按钮11.C#Winform 自定义透明按钮和单窗体模块化实现12.C#Winform设计的通用标签设计器13.C#Winform使用mysql作为本地数据库14.C#winform自定义控件模拟设计时界面鼠标移动和调节大小、选中效果15.我在winform项目里使用“Windows I/O完成端口”的经验分享16.一次人脸识别ViewFaceCore使用的经验分享,看我把门店淘汰下来的POS机改成了人脸考勤机关注点:
- 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 > 65000) { #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里处理。然后把收到的条码传给脚本进行解析。
作者:数据酷软件
出处:https://www.cnblogs.com/datacool/p/datacool2018042402.html
关于作者:20年编程从业经验,持续关注MES/ERP/POS/WMS/工业自动化
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明。
联系方式: qq:71008973;wx:6857740733
基于人脸识别的考勤系统 地址: https://gitee.com/afeng124/viewface_attendance_ext
自己开发安卓应用框架 地址: https://gitee.com/afeng124/android-app-frame
WPOS(warehouse+pos) 后台演示地址: http://47.239.106.75:8080/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?