2013-02-26 2 views
0

Я разрабатываю приложение для магазина одежды для печати счетов-фактур в этом приложении. Я хочу использовать сканер штрих-кода для автоматического сбора информации из тега элемента, содержащей штрих-код, и автоматически заполнять всю информацию в моя форма, и после этого я распечатываю счет-фактуру. Просьба дать некоторые рекомендации по работе с этой проблемой. Я также использую библиотеку Microsoft.PointOfService.Работа со сканером штрих-кода в приложении Windows C#

ответ

0

Обычно сканер штрих-кода просто отправляет все распознанные символы в качестве стандартного ввода на клавиатуре. Таким образом, когда пользователь настраивает фокус на текстовое поле в вашем приложении и сканирует штрих-код, он будет таким же, как если бы пользователь просто ввел символы штрих-кода вручную и нажал «Enter» (или любой другой ключ, в зависимости от настроек сканера).

+0

@ Alex Киселёв Спасибо за ваш ответ .. –

1

Предположим, у вас есть текстовое поле в форме, когда штрих-код сканирует, он набирает символы штрих-кода в текстовом поле. Как правило, некоторые сканеры могут быть настроены для добавления другого символа в конце сканирования, чаще всего нового символа линии. При этом вы можете прослушивать событие KeyPress текстового поля и обрабатывать символ New Line. Когда это срабатывает, вы можете получить другие детали в форме.

+0

спасибо за ваш ответ –

0

У меня есть класс в моей личной библиотеке, чтобы обнаружить сканер работает:

public sealed class ScanReader 
{ 
    #region Delegates 

    public delegate void _DataLoaded(string ScannedData); 

    #endregion 

    private readonly double MyMaxMillisecondsBetweenPress; 
    private readonly List<Regex> MyRegex; 
    private readonly Timer TimeToNextKeyPress = new Timer(); 
    private string CardBuff = string.Empty; 
    private bool FirstKeyPress = true; 
    private DateTime Stamp; 

    /// <summary> 
    /// ScanReader constructor 
    /// </summary> 
    /// <param name="Press"> Form where KeyPreview = true </param> 
    /// <param name="Regs"> Regular expressions for filtering scanned data</param> 
    /// <param name="MaxMillisecondsBetweenPress"> The maximum time between pressing the keys in milliseconds, default = 60 </param> 
    public ScanReader(Form form, List<Regex> Regs = null, double MaxMillisecondsBetweenPress = 0) 
    { 
     MyRegex = Regs ?? null; 
     MyMaxMillisecondsBetweenPress = MaxMillisecondsBetweenPress == 0 ? 60 : MaxMillisecondsBetweenPress; 
     form.KeyPress += KeyPressed; 
     TimeToNextKeyPress.Interval = 
      Convert.ToInt32(MyMaxMillisecondsBetweenPress + MyMaxMillisecondsBetweenPress*0.2); 
     TimeToNextKeyPress.Tick += TimeToNextKeyPress_Tick; 
    } 

    public event _DataLoaded OnDataLoaded; 

    private void TimeToNextKeyPress_Tick(object sender, EventArgs e) 
    { 
     TimeToNextKeyPress.Stop(); 
     if (MyRegex.Count > 0) 
     { 
      foreach (Regex reg in MyRegex) 
      { 
       if (reg.IsMatch(CardBuff)) 
       { 
        OnDataLoaded(CardBuff); 
        return; 
       } 
      } 
     } 
     else 
      OnDataLoaded(CardBuff); 
    } 

    private void KeyPressed(object sender, KeyPressEventArgs e) 
    { 
     if (FirstKeyPress) 
     { 
      Stamp = DateTime.Now; 
      FirstKeyPress = false; 
      CardBuff = e.KeyChar.ToString(); 
     } 
     else 
     { 
      if ((DateTime.Now - Stamp).TotalMilliseconds < MyMaxMillisecondsBetweenPress) 
      { 
       Stamp = DateTime.Now; 
       CardBuff += e.KeyChar; 
      } 
      else 
      { 
       Stamp = DateTime.Now; 
       CardBuff = e.KeyChar.ToString(); 
      } 
     } 
     TimeToNextKeyPress.Stop(); 
     TimeToNextKeyPress.Start(); 
    } 
} 

Как использовать:

var myReader = new ScanReader(this, new List<Regex> 
               { 
                new Regex(@"296\d{13,13}"), 
                new Regex(@"K%.{5,34}"), 
                new Regex(@"C%.{5,34}"), 
                new Regex(@"E%.{5,34}"), 
               }); 
     myReader.OnDataLoaded += FillControls;