Member 14519564 Ответов: 2

Можете ли вы предоставить мне код для приложения C# windows form, чтобы прочитать только последние десять символов QR-кода с помощью сканера?


Я могу получить данные QR-кода в своих текстовых полях, но я просто хочу получить последние десять символов данных QR - кода.

Что я уже пробовал:

Я попробовал приложение windows form с помощью threading, в трех текстовых полях и метке я могу прочитать QR-коды, но для конечного пользователя при наведении курсора он должен видеть только последние 10 символов из QR-кода.

Пожалуйста, помогите мне
[Правка - ОП-код от комментария]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Barcodetesting_14_7
{
	public partial class Form1 : Form
	{

		private Dictionary<textbox, textbox=""> TextBoxOrder = new Dictionary<textbox, textbox="">();
		private void Form1_Load(object sender, EventArgs e)
		{

		}

		public Form1()
		{
			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;
		}
	}
}

F-ES Sitecore

Это потребует изменения вашего кода, который мы не можем видеть.

Member 14519564

Вот код, пожалуйста, измените его, чтобы читать только последние десять символов.

использование системы;
использование системы.Коллекции.Общий;
использование системы.ComponentModel;
использование System.Data;
использование системы.Рисование;
использование System.Linq;
использование System.Text;
использование системы.Нарезание резьбы.Задачи;
использование системы.Окна.Формы;

пространство имен Barcodetesting_14_7
{
общественности частичного класс form1 : форма
{

частная словарь&ЛТ;текстовое поле, текстовое поле=""&ГТ; TextBoxOrder = новый словарь&ЛТ;текстовое поле, текстовое поле=""&ГТ;();
частный недействительными методе form1_load(объект отправителя, EventArgs в электронной)
{

}

открытый form1()
{
метод InitializeComponent();

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

BarcodeInput1.Тег = 1;
BarcodeInput2.Бирка = 2;
BarcodeInput3.Тег = 3;

BarcodeInput1.Клавиша Вниз += BarcodeInputKeyDown;
BarcodeInput2.Клавиша Вниз += BarcodeInputKeyDown;
BarcodeInput3.Клавиша Вниз += BarcodeInputKeyDown;

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

private void BarcodeInputKeyDown(отправитель объекта, KeyEventArgs e)
{
if (e.KeyCode == ключи.Введите && ActiveControl.GetType() == typeof(текстовое поле))
{
Текстовое поле nextTextBox;
if (TextBoxOrder.TryGetValue((TextBox)ActiveControl, out nextTextBox))
{
е.Обработано = истина;
e.Suppressskeypress = true;
nextTextBox.Сосредоточить();
}
}
}

частная BarcodeInputLeave недействительным(объект отправителя, EventArgs в электронной)
{
если (отправитель.GetType() == typeof(текстовое поле))
{
TextBox textBox = (текстовое поле)отправитель;
если (текстовое поле.Бирка.Метод gettype() == typeof на(Инт))
{
BarcodeScanned(текстовое поле.Текст (инт)текстовое поле.Тег);
}
}
}

частный недействительными BarcodeScanned(строка штрих-кода, тем инт )
{
Сносимабель.Текст = порядок.ToString() + ": "+ штрих-код;
}
}
}

CHill60

Никто не будет пытаться прочитать неформатированный дамп кода - я обновил ваш вопрос с вашим кодом - в следующий раз используйте ссылку "улучшить вопрос", чтобы обновить свой пост

Member 14519564

хорошо, спасибо

2 Ответов

Рейтинг:
6

CHill60

Полный ответ, как ОП борется

DemoLabel.Text = order.ToString() + ": " + ((barcode.Length > 10) ? barcode.Substring(barcode.Length - 10, 10)  : barcode);


Member 14519564

при линейном применении.Run(new Form1()); он показывает исключение необработанной системы.ArgumentOutOfRangeExceptions: startindex не может быть меньше нуля

Dave Kreskowiak

Это означает, что строка штрих-кода состоит из 9 символов или короче.

Отладчик! Научитесь использовать его или бороться, чтобы написать код для остальной части вашей жизни кодирования.

Richard MacCutchan

Может быть, вам стоит потратить некоторое время, чтобы узнать больше .NET и Windows Forms, ваши вопросы совсем не связаны с чтением штрих-кодов.

Member 14519564

Хорошо, Спасибо

Dave Kreskowiak

Как, черт возьми, вы ожидаете получить описание того, как написать целое приложение в нескольких сообщениях на форуме?

CHill60

В моем решении была опечатка - лишняя ; раньше : barcode); который я сейчас удалил

Member 14519564

Последние десять чарктеров уже появились на этикетке. но курсор должен быть в моем первом текстовом поле, и после чтения последних символов из метки я должен очистить текстовое поле и сделать новое чтение. Но когда я держу курсор в двух других текстовых полях, он показывает ошибку необработанного исключения.

Как я могу сделать приложение, в котором я могу использовать только одно текстовое поле для чтения QR-кода и одну метку, чтобы получить последние 10 символов?

CHill60

Необработанное исключение где? Вероятно, это связано с тем, что вы используете событие Leave вместо (например) проверенного события. Leave будет уволен, когда вы ... э-э... покинете текстовое поле, тогда как Validated должен быть уволен, когда вы фактически измените содержимое текстового поля. Используйте отладчик для проверки - Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Отладочный код для абсолютных новичков - Visual Studio | Microsoft Docs[^]
Что касается того, как сделать приложение и т. д. ... У вас уже есть один, хотя я начинаю подозревать, что вы не писали этот код

Рейтинг:
1

Richard MacCutchan

После того как вы расшифровали штрих код в текстовую строку вы можете использовать Length и SubString от Класс String (System) | Microsoft Docs[^] чтобы получить последние 10 символов.


Member 14519564

не могли бы вы изменить приведенный выше код, чтобы получить последние 10 символов.

CHill60

Вы можете делать резьбу и читать штрих-коды, но не можете использовать простой метод или свойство?
Изменить

DemoLabel.Text = order.ToString() + ": " + barcode;
к
DemoLabel.Text = order.ToString() + ": " + barcode.Substring(barcode.Length - 10, 10);

Member 14519564

Большое вам спасибо. Это работает..:)

Member 14519564

Он работает, но иногда показывает: в вашем приложении произошло необработанное исключение. StartIndex не может быть меньше нуля.

Что я должен сделать, чтобы исправить эту ошибку?

CHill60

Проверьте, есть ли штрих-код.Длина сначала больше 10 - если нет, то просто отобразите весь штрих-код

CHill60

Я опубликовал решение с использованием тернарного оператора