我正在开发一个应用程序,需要能够扫描多种长度/类型的I2of5条形码。 较长的条形码长度为 14 位,较短的条形码长度为 4 位或 10 位。
我设置为 I2OF5 解码器的参数以允许这样做:
Barcode2 symbolBarcode2 = new Barcode2(Symbol.Barcode2.Devices.SupportedDevices[0]);
symbolBarcode2.Config.Decoders.I2OF5.MinLength = 4;
symbolBarcode2.Config.Decoders.I2OF5.MaxLength = 14;
我在扫描仪解码较长条形码的部分扫描时遇到问题。 将最小值和最大值设置为 14 可以解决此问题,但不再允许扫描较短的条形码。
14 位条形码使用 USS 校验位。 如果我在 I2of5 参数中打开 USS 校验位方案,它可以解决问题,因为部分扫描几乎永远不会有正确的校验位。 但是 10 位和 4 位条形码不使用校验位,因此它们不再扫描。
有没有办法拥有多组 I2of5 参数? 然后我可以创建一个在 USS 打开的情况下最小和最大长度为 14,在 USS 关闭的情况下创建另一个最小和最大长度为 10,第三个最小和最大长度为 4,也关闭了 USS。
我相信 Intermec API 允许这样做,具有多组活动参数,但在摩托罗拉 EMDK 中找不到一种方法来做到这一点。 我正在使用 .Net EMDK 2.7。
控件拖放到设备的窗体上,确保它具有焦点,然后处理 TextChanged 事件或添加计时器以每 500 毫秒读取一次 TextBox 的 Text 属性。
这两个事件(计时器滴答和文本框文本更改(都具有相同的签名,因此您甚至可以将这两个事件连接到同一事件!
private const bool USETIMER = true;
private const int TIMER_MS = 500;
private System.Windows.Forms.Timer m_timer;
private TextBox txtBarcode;
public Form1() {
InitializeComponent();
if (USETIMER) {
m_timer = new System.Windows.Forms.Timer();
m_timer.Interval = TIMER_MS;
m_timer.Tick += new EventHandler(Barcode_Check);
m_timer.Enabled = true;
} else {
txtBarcode.TextChanged += new EventHandler(Barcode_Check);
}
}
private void Barcode_Check(object sender, EventArgs e) {
if (!String.IsNullOrEmpty(txtBarcode.Text)) {
// Process your barcode
}
}
您根本不需要使用他们的 SDK。