Рейтинг:
2
caffrey_1
Думаю, я мог бы решить эту проблему с помощью таймера - это выглядит нормально ? Я бы предпочел, чтобы он был скрыт, хотя в настоящее время там есть текстовое поле с мигающим курсором
Private Sub rfidbox_textchanged(sender As System.Object, e As System.EventArgs) Handles rfidbox.TextChanged
Timer1.Stop()
Timer1.Start()
End Sub
событие Tick
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
Timer1.Stop()
cardnumber = rfidbox.Text.ToString
Dim name As String
Dim x As New signclass
If rfidbox.Text = "" Then
Else
name = x.getnamefromcard(rfidbox.Text.ToString)
MsgBox(name)
rfidbox.Text = ""
End If
Dave Kreskowiak
Таймер-плохая идея. TextChanged срабатывает при каждом нажатии клавиши в поле, так что вы собираетесь остановить и запустить таймер десять раз для каждой карты.
Можно ли настроить считыватель карт? Есть ли у if возможность отправлять префиксные и постфиксные символы вместе с кодом? Если это так, ваша работа становится проще.
Если нет, то у вас есть проблема. Клавиатурные клиновые устройства могут быть немного привередливыми. Когда код" набирается " читателем, что делать, если появится системный диалог? Часть кода идет в диалоговое окно, а не в текстовое поле. Единственный способ достоверно сказать: "это весь номер" - нажать кнопку.
Невидимое текстовое поле не получает фокуса, поэтому оно также не получает никакого ввода с клавиатуры. Кроме того, что делать, если считыватель не сможет прочитать карту? Как еще вы собираетесь получить идентификационный номер?
Если вы можете делать коды до и после исправления, это становится немного сложнее, но гораздо надежнее. Используя Form. KeyPreview, вы можете искать префиксный код, захватывать нажатия клавиш для кода, пока не увидите постфиксные коды.
caffrey_1
Кард-ридер тупой, он действует точно так же, как клавиатура, и бросает код в любое окно \ элемент управления, находящийся в фокусе. Мне не нужно беспокоиться о системных диалогах и других вещах, так как это автономное приложение
(Это система входа) таким образом, на главном экране есть в основном кнопки входа и выхода. Для удобства я планировал добавить функции чтения карт в основную форму.
У меня есть достаточно надежная работа с приведенным выше кодом, так как он возвращает правильное имя, извлеченное из поля LDAP, но мне не нравится, что текстовое поле видно (я уменьшил его до размера 1x1 пикселя, но оно все равно мигает само по себе!)
Начинаю думать, что это плохая идея для того времени, которое она экономит конечному пользователю, поэтому могу просто отказаться от нее
Рейтинг:
0
caffrey_1
Думаю, я исправил это с помощью вашего указателя (USB-считыватель входит после ввода)
Private Sub rfidinput_keypress(sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles rfidinput.KeyPress
If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
Dim name As String
Dim x As New signclass
If rfidinput.Text = "" Then
Else
name = x.getnamefromcard(rfidinput.Text.ToString)
MsgBox(name)
rfidinput.Text = ""
End If
End If
End Sub
Я поддерживаю фокус на текстовом поле, перефокусируясь при нажатии других элементов