Code1000 Ответов: 1

Как считывать штрих-код с помощью сканера штрих-кодов


Здравствуйте эксперты,

Я новичок в этом деле. VB.NET но я мог бы сделать все для небольшого и простого программирования.

В своем проекте я буду генерировать штрих-код и распространять его среди людей. Они снабжены парой сканеров штрих-кодов, и каждый человек будет иметь 3 штрих-кода для сканирования, чтобы завершить одну запись.
Я мог бы управлять генерацией штрих-кода, теперь мне нужно прочитать штрих-код и сохранить данные на моем компьютере. У меня есть план подключить его к серверу, однако на данный момент я хочу сохранить его локально на своей машине. Можете ли вы сказать мне, как это сделать?

Для получения дополнительной информации можете ли вы также сказать мне,
Если я покупаю сканер штрих-кодов, предоставляют ли они какое-либо программное обеспечение для сбора считанных данных, является ли это программное обеспечение настраиваемым.
Не могли бы вы рассказать мне, как работает считывание штрих-кодов?

Пожалуйста, помогите мне, так как это мой проект и требуется срочно.
Любая помощь будет высоко оценена.


Заранее спасибо.

1 Ответов

Рейтинг:
4

Sascha Lefèvre

Если вы покупаете сканеры штрих-кодов с USB-разъемом, они будут иметь эмуляцию клавиатуры. Это означает, что они будут посылать события нажатия клавиш в ваше приложение, как если бы вы ввели что-то с клавиатуры. Вы можете убедиться в этом, открыв любое текстовое приложение и отсканировав штрих-код. Он должен выглядеть так, как будто введен с клавиатуры.

Таким образом, все, что вам нужно сделать, это убедиться, что некоторый элемент управления вводом текста имеет фокус ввода, прежде чем пытаться сканировать что-то, а затем обрабатывать его, как любой текстовый ввод.

Теоретически есть способы непосредственно считывать его со сканера штрих-кодов, так что вам не нужно иметь этот элемент управления вводом текста, но это было бы гораздо более продвинутым и, как вы говорите, вы новичок в этом деле. VB.NET-скорее всего, это выходит за рамки вашей нынешней сферы деятельности. Если вы все равно хотите взглянуть на это, я могу служить вам только статьей, которая делает это с помощью C#:
Использование необработанного ввода с языка C# для работы с несколькими клавиатурами[^]

Редактировать после комментария:
Я построил для вас пример кода. Создайте новый проект Windows-Forms-Project, добавьте в форму три текстовых поля с помощью конструктора и назовите их BarcodeInput1, BarcodeInput2, BarcodeInput3 и добавьте метку с именем DemoLabel. Затем замените код Form1 (исходный файл "Form1.vb") на следующий код.

Если вы вводите (или сканируете) что-то в текстовое поле 1, а затем нажимаете Enter (что обычно автоматически делают сканеры штрих-кодов после сканирования штрих-кода), введенный/отсканированный текст будет отображаться с помощью DemoLabel, а фокус ввода автоматически переместится в текстовое поле 2, затем в текстовое поле 3 и оттуда снова в текстовое поле 1.

Пожалуйста, обратите внимание, что это всего лишь образец. Я не очистил введенный текст от текстовых полей. VB.NET-код является автоматическим переводом с C# и может содержать одну или две странности (но он работает).

VB.NET

Public Class Form1
    Private TextBoxOrder As New Dictionary(Of TextBox, TextBox)()

    Public Sub New()
        InitializeComponent()

        TextBoxOrder.Add(BarcodeInput1, BarcodeInput2)
        TextBoxOrder.Add(BarcodeInput2, BarcodeInput3)
        TextBoxOrder.Add(BarcodeInput3, BarcodeInput1)

        BarcodeInput1.Tag = 1
        BarcodeInput2.Tag = 2
        BarcodeInput3.Tag = 3

        AddHandler BarcodeInput1.KeyDown, AddressOf BarcodeInputKeyDown
        AddHandler BarcodeInput2.KeyDown, AddressOf BarcodeInputKeyDown
        AddHandler BarcodeInput3.KeyDown, AddressOf BarcodeInputKeyDown

        AddHandler BarcodeInput1.Leave, AddressOf BarcodeInputLeave
        AddHandler BarcodeInput2.Leave, AddressOf BarcodeInputLeave
        AddHandler BarcodeInput3.Leave, AddressOf BarcodeInputLeave
    End Sub

    Private Sub BarcodeInputKeyDown(sender As Object, e As KeyEventArgs)
        If e.KeyCode = Keys.Enter AndAlso ActiveControl.[GetType]() = GetType(TextBox) Then
            Dim nextTextBox As TextBox
            If TextBoxOrder.TryGetValue(DirectCast(ActiveControl, TextBox), nextTextBox) Then
                e.Handled = True
                e.SuppressKeyPress = True
                nextTextBox.Focus()
            End If
        End If
    End Sub

    Private Sub BarcodeInputLeave(sender As Object, e As EventArgs)
        If sender.[GetType]() = GetType(TextBox) Then
            Dim textBox As TextBox = DirectCast(sender, TextBox)
            If textBox.Tag.[GetType]() = GetType(Integer) Then
                BarcodeScanned(textBox.Text, CInt(textBox.Tag))
            End If
        End If
    End Sub

    Private Sub BarcodeScanned(barcode As String, order As Integer)
        DemoLabel.Text = Convert.ToString(order.ToString() + ": ") & barcode
    End Sub
End Class


С#
using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace BarcodeTest
{
    public partial class Form1 : Form
    {
        private Dictionary<TextBox, TextBox> TextBoxOrder = new Dictionary<TextBox, TextBox>();

        public BarcodeInputForm()
        {
            InitializeComponent();

            TextBoxOrder.Add(BarcodeInput1, BarcodeInput2);
            TextBoxOrder.Add(BarcodeInput2, BarcodeInput3);
            TextBoxOrder.Add(BarcodeInput3, BarcodeInput1);

            BarcodeInput1.Tag = 1;
            BarcodeInput2.Tag = 2;
            BarcodeInput3.Tag = 3;

            BarcodeInput1.KeyDown += BarcodeInputKeyDown;
            BarcodeInput2.KeyDown += BarcodeInputKeyDown;
            BarcodeInput3.KeyDown += BarcodeInputKeyDown;

            BarcodeInput1.Leave += BarcodeInputLeave;
            BarcodeInput2.Leave += BarcodeInputLeave;
            BarcodeInput3.Leave += BarcodeInputLeave;
        }

        private void BarcodeInputKeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter && ActiveControl.GetType() == typeof(TextBox))
            {
                TextBox nextTextBox;
                if(TextBoxOrder.TryGetValue((TextBox)ActiveControl, out nextTextBox))
                {
                    e.Handled = true;
                    e.SuppressKeyPress = true;
                    nextTextBox.Focus();
                }
            }
        }

        private void BarcodeInputLeave(object sender, EventArgs e)
        {
            if (sender.GetType() == typeof(TextBox))
            {
                TextBox textBox = (TextBox)sender;
                if (textBox.Tag.GetType() == typeof(int))
                {
                    BarcodeScanned(textBox.Text, (int)textBox.Tag);
                }
            }
        }

        private void BarcodeScanned(string barcode, int order)
        {
            DemoLabel.Text = order.ToString() + ": " + barcode;
        }
    }
}


Code1000

Спасибо за Ваш быстрый ответ, не могли бы вы объяснить это немного подробнее, чтобы я мог попробовать. Я использую VS Express 2013. Предположим, у меня есть 3 текстовых поля (Textbox1, Textbox2,Textbox3) и у меня есть 3 штрих-кода. Когда я сканирую эти штрих-коды, я хочу, чтобы его данные были в каждом текстовом поле.
Спасибо, что уделили мне время.

Sascha Lefèvre

Я добавил пример кода для вас к своему ответу, пожалуйста, взгляните. Пожалуйста примите решение если оно было полезно для вас :-)

Code1000

Спасибо за ваш код и время, однако я думаю, что это для C#, но мне нужен код для VB.NET -пожалуйста.

Sascha Lefèvre

Извините :-) я обновил свой ответ выше с помощью VB.NET-кода.

Sascha Lefèvre

Вы проверили это место? VB.NET код?

Code1000

Мне очень жаль, что я не смог проверить или ответить. Большое вам спасибо за Ваш быстрый повтор, и теперь я выберу ваш ответ в качестве решения для вашей самоотдачи, и я не хочу ждать, пока я проверю ваш код, так как это займет время.
Еще раз благодарю вас.

Sascha Lefèvre

Всегда пожалуйста! И спасибо тебе тоже :)

manikanta jaladi

Привет всем,ваше решение очень полезно для меня большое спасибо за вашу работу, но у меня есть небольшое сомнение, как дать изображение штрих-кода в качестве ввода в текстовое поле, и это изображение должно быть Отсканировано сканером на основе usb, и эти данные будут отображаться в виде этикетки ваш ответ очень велик для меня

Member 13919156

Саша Лефевр.
сэр,
Я хочу сканировать штрих-код только для одного текстового поля, которое вы добавили в свое вышеприведенное решение три текстовых поля .. но я хочу, и у меня есть только одно текстовое поле для сканирования штрих-кода... plz модифицируйте его для одного текстового поля ... когда я сканирую штрих-код, продукт должен добавить и текстовое поле снова готово к следующему сканированию.... ввод не требуется... плз заранее спасибо