none
BarcodeScanner RRS feed

  • Вопрос

  • Здравствуйте! Есть сканер работает он как эмулятор клавиатуры. Проблема заключается в следующем не знаю как при сканировании автоматически фокусироваться на textboxe???(язык C#)
    • Изменено Jecuss 17 октября 2015 г. 7:41 Ошибка
    17 октября 2015 г. 7:40

Ответы

  • Установить у формы KeyPreview property в истину и тогда клавиатурный ввод, независимо от положения фокуса будет попадать в процедуру обработки события формы.

        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                this.KeyPreview = true;
            }
    
            private void Form1_KeyPress(object sender, KeyPressEventArgs e)
            {
                this.textBox1.Text += e.KeyChar;
            }
        }
    В тоже время понятно, что сканер, без собственного объекта с набором событий (как раз ваш случай), не обеспечит пользователю ввод штрих-кода "по событию", если на форме есть и другие контролы допускающие текстовый ввод.


    17 октября 2015 г. 14:06

Все ответы

  • У вас же скорее всего API есть от этого устройства и оно должно вас как то уведомлять о прочтении, скорее всего через событие (event). Вам нужно подписаться на него, ну а потом можно установить фокус на элемент, в случае Windows Forms например так: textBox1.Select().

    Сделаем содержимое сообщества лучше, вместе!

    17 октября 2015 г. 9:02
    Модератор
  • Вот в том то и дело что нет! работает как эмулятор клавиатуры через порт не законектиться(
    17 октября 2015 г. 11:25
  • Когда сканер работает в разрыв клавиатуры, то символы получаемые со сканера ничем не отличаются от простого набора на клавиатуре, признаком конца набора штриха является символ перевода коретки, т.е. Enter (Хотя это вроде настраивается с помощью служебных штрих кодов сканера). Вам просто у всех элементов формы, на которые можно установить фокус в обработчик клавиатуры запихнуть собственную функцию, которая бы добавляла полученный символ с клавиатуры в конец строки вашего textbox и если он не в фокусе, ставила бы фокус на него.

    • Изменено Liliya Muray 17 октября 2015 г. 13:35
    17 октября 2015 г. 13:33
  • Установить у формы KeyPreview property в истину и тогда клавиатурный ввод, независимо от положения фокуса будет попадать в процедуру обработки события формы.

        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                this.KeyPreview = true;
            }
    
            private void Form1_KeyPress(object sender, KeyPressEventArgs e)
            {
                this.textBox1.Text += e.KeyChar;
            }
        }
    В тоже время понятно, что сканер, без собственного объекта с набором событий (как раз ваш случай), не обеспечит пользователю ввод штрих-кода "по событию", если на форме есть и другие контролы допускающие текстовый ввод.


    17 октября 2015 г. 14:06
  • переделал на wpf c KeyPress все хорошо, но при любом вводе с клавиатуры в textbox вставляется текст
    18 октября 2015 г. 5:09
  • Установить у формы KeyPreview property в истину и тогда клавиатурный ввод, независимо от положения фокуса будет попадать в процедуру обработки события формы.

        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                this.KeyPreview = true;
            }
    
            private void Form1_KeyPress(object sender, KeyPressEventArgs e)
            {
                this.textBox1.Text += e.KeyChar;
            }
        }
    В тоже время понятно, что сканер, без собственного объекта с набором событий (как раз ваш случай), не обеспечит пользователю ввод штрих-кода "по событию", если на форме есть и другие контролы допускающие текстовый ввод.


    не могу логику ни как придумать

    private void MainWindow_OnKeyUp(object sender, KeyEventArgs e)
            {
                if (e.Key==Key.Enter)
                {//начать ввод

                }
                else if (e.Key==Key.Return)
                {
                    //запретить
                }


            }


    18 октября 2015 г. 5:26
  • переделал на wpf c KeyPress все хорошо, но при любом вводе с клавиатуры в textbox вставляется текст
    Да, так и будет. Как Вам написал iBykovsky, если на форме будут другие элементы ввода, то им ничего от клавиатуры не достанется... Надо либо приучить пользователей к тому, чтобы перед считыванием фокус надо ставить на textbox, либо на форме не должно быть других элементов клавиатурного ввода...
    18 октября 2015 г. 5:29
  • Конечно, с таким сканером общее решение возможно только с включением в логику некого флага - "идет ввод штрих-кодов". Как реализовать этот флаг - кнопка на форме, открытие суб-окна или что-то другое - уже детали.

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

    Но это только общие соображения.  

    18 октября 2015 г. 9:17