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 штрих-кода. Когда я сканирую эти штрих-коды, я хочу, чтобы его данные были в каждом текстовом поле.
Спасибо, что уделили мне время.
manikanta jaladi
Привет всем,ваше решение очень полезно для меня большое спасибо за вашу работу, но у меня есть небольшое сомнение, как дать изображение штрих-кода в качестве ввода в текстовое поле, и это изображение должно быть Отсканировано сканером на основе usb, и эти данные будут отображаться в виде этикетки ваш ответ очень велик для меня