Проверьте TextBox до того, как будет запущено событие _Change - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть форма с 3 TextBox элементами управления: код запаса, количество, номер сертификата.Стандартный код TextBox настроен на автоматическую фокусировку при загрузке формы.

Я также подключил сканер штрих-кода к своему ПК, так как пользователь хочет иметь возможность сканировать штрих-код назаполните TextBox или введите данные вручную.

Отсканированные этикетки содержат два штрих-кода.Один - это номер сертификата, а другой - код запаса.

Штрих-код акции имеет префикс «SBC /», а штрих-код сертификата - «C /".

».Когда пользователь сканирует штрих-код, если TextBox в фокусе является фондовым кодом TextBox, тогда я хочу выполнить проверку, как показано ниже.

Private Sub txtStockCode_Change()

On Error GoTo errError1

If Len(txtStockCode.Text) >= 5 Then
    If bChangeCode Then
        If Left(txtStockCode.Text, 2) = "C/" Then
            msgbox "You have scanned the certificate barcode; please scan the stock barcode."
            txtStockCode.Text = ""
        Else
            bChangeCode = False
            txtStockCode.Text = Replace(txtStockCode.Text, "SBC/", "")
            txtStockCode.Text = Replace(txtStockCode.Text, "*", "")
        End If
    End If
End If

Exit Sub

Допустим, фокус в настоящее время находится накод запаса TextBox.

Если сканируется штрих-код запаса, должно произойти следующее:

  • Длина кода запаса больше 5

  • Осталось 5 символов не = "C /", поэтому был отсканирован правильный код

  • TextBox текстовое значение обновлено для удалениявсе * и префикс «SBC /»

Например, «SBC / A12-TR0 *» становится «A12-TRO»

и

  • Длина номера сертификата превышает 5

  • Осталось 5 символов do = "C /", поэтому был отсканирован неверный код

  • MsgBox пользователю

  • TextBox значение сбрасывается на ""

Однако, независимо от того, какой код сканируется в код запаса TextBox, значение никогда не проверяется.

Например, «SBC / A12-TR0 *» остается как «SBC / A12-TR0 *», а «C / 29760» остается как «C / 29760»

Поскольку код подтверждения являетсято же самое в сертификате TextBox, тот же шаблон повторяется наоборот.

Почему мои значения не обновляются, или как я могу проверить ввод до того, как _Change запущен?

РЕДАКТИРОВАТЬ

Я изменил свой код на

Private Sub txtStockCode_Change

   If txtStockCode.Text <> "" Then
      txtStockCode.Text = Replace(txtStockCode.Text, "SBC/", "")
      txtStockCode.Text = Replace(txtStockCode.Text, "*", "")
   End If

End Sub

Но он по-прежнему отображает префикс SBC /, но удаляет два * символа (вначало и конец штрих-кода, который требуется сканеру для считывания штрих-кода)

1 Ответ

0 голосов
/ 03 декабря 2018

Вы можете попытаться настроить считыватель штрих-кода так, чтобы он возвращал клавишу Enter в конце отсканированного штрих-кода, а затем использовать событие нажатия клавиши, чтобы проверить его и внести изменения.

Sub txtStockCode_KeyPress(KeyAscii As Integer)
    If KeyAscii = vbKeyReturn Then
        If Len(txtStockCode.Text) >= 5 Then
            If bChangeCode Then
                If Left(txtStockCode.Text, 2) = "C/" Then
                    msgbox "You have scanned the certificate barcode; please scan the stock barcode."
                    txtStockCode.Text = ""
                Else
                    bChangeCode = False
                    txtStockCode.Text = Replace(txtStockCode.Text, "SBC/", "")
                    txtStockCode.Text = Replace(txtStockCode.Text, "*", "")
                End If
            End If
        End If        
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...