Гость
Map
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Накопление символов в строку при KeyPress. / 25 сообщений из 40, страница 1 из 2
01.02.2022, 14:57
    #40131023
tavr2022
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Накопление символов в строку при KeyPress.
Доброго.
Пишу небольшую программку. Логика то мне ясна, хотя может вы, что умного подскажите. Цель получение и обработка набора символом получаемых со сканера шрихкода подключено как эмулятор клавиатуры.
Для железа (и ПО соответственно) ввод со сканера (в разрыв клавиатуры) не отличается от набора на клавиатуре. Единственно, что можно отследить - интервал между нажатиями - человек не надолбит 13 цифр за доли секунды.
В сканере у меня есть префикс и постфикс соответственно начало и завершение штрих кода.
На чем я заткнулся. Есть форма. У нее есть событие KeyPress, в C# я не силен, так вот мне надо накапливать входящие значения.
Ну типа такого. Получаем в событии KeyPress текущий символ клавиатуру, если это префикс, то вызываем свою процедуру. Сразу вопрос, где ее лучше разметить? В своей процедуре. Туту тоже вопрос, нужно где-то хранить переменную вне процедуры. Если это префикс то нашу переную обнуляем, если нет, то добавляем в конец текущий полученный символ, если это это суффикс, то вызываем другую свою процедуру.
Вроде просто, но сообразить не могу. В C# только начал работать.
Заранее спасибо за ответы.
...
Рейтинг: 0 / 0
01.02.2022, 16:03
    #40131045
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Накопление символов в строку при KeyPress.
нафига весь этот секс с KeyDown? просто сделай текстовое поле, в которое шрихкод будет вносить данные, пользователь пусть сам убедится в их корректности, а еще лучше со сканером работать в нормально режиме, без всяких эмуляций, тогда можно и события сканирования сделать и получать нормальный код, без всяких KeyDown'ов. Библиотек для этого уже 100500 понаписано, для всего, что только можно
...
Рейтинг: 0 / 0
01.02.2022, 19:34
    #40131102
tavr2022
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Накопление символов в строку при KeyPress.
У меня нет текстового поля. Да и не нужно оно мне, штрихкод не читабелен, длинен, и пользователю там нечего делать.
Ремиv эмуляции клавиатуры есть самый нормальный режим. Все сканеры так сейчас работают.
...
Рейтинг: 0 / 0
01.02.2022, 20:26
    #40131107
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Накопление символов в строку при KeyPress.
tavr2022,
сканеры могут передавать данные в режиме COM-порта- то есть тебе не нужны какие-либо текстовые поля, нужно только прослушиватель данных из com-порта. Очень удобно- последовательность символов приходит целой пачкой.
...
Рейтинг: 0 / 0
01.02.2022, 20:46
    #40131109
tavr2022
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Накопление символов в строку при KeyPress.
Могут.
Но это надо ставить драйверы, опять не везде есть ком порты, опять не у всех сканеров есть такая возможность
Опять это эмуляция, переходники USB-COM или наоборот.
С моим зоопарком-то проблем будет. Не хочу.
Опять же проброс на сервер терминалов.
А так воткнул, винда сама нашла, дрова подкинула и поехали.
...
Рейтинг: 0 / 0
01.02.2022, 20:54
    #40131111
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Накопление символов в строку при KeyPress.
tavr2022,
там виртуальный com-порт-никаких аппаратных дополнительных модулей ставить не надо. Драйвер используется тот же, что и для передачи в режиме текстовой вставки. Единственное нужно будет дополнительно прописать номер порта. Зачем нужен проброс на сервер терминалов? Вы делаете приложение, которое слушает COM-порт и само обрабатывает данные.
...
Рейтинг: 0 / 0
01.02.2022, 21:16
    #40131114
tavr2022
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Накопление символов в строку при KeyPress.
Ну не хочу я COM портами возиться.
Надоело.
Проброс для тонких клиентов, а они на малинке у меня. Какие там нафиг порты и драйверы.
В общем хочу так. Как сначала написал.
...
Рейтинг: 0 / 0
01.02.2022, 21:28
    #40131116
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Накопление символов в строку при KeyPress.
tavr2022,
считывание сканером это как будто ввели набор символов и нажали Enter.
Без текстового поля не обойтись, поэтому если его не нужно показывать, то придётся делать его скрытым и следить все время, чтобы фокус был именно на нем. Не знаю прокатит ли это со скрытым TextBox.
Так же необходимо будет все время следить за раскладкой клавиатуры- сканирование при разных раскладках дает разный результат.
То есть или менять кириллицу на латиницу на ходу или делать запрет на её ввод.
Считывать каждый символ и накапливать его не придется - нужно слушать событие нажатия Enter- и ты получишь всю последовательность штрихкода-после этого нужно очистить TextBox. С малинок куда хочешь, туда дальше и кидай- хочешь по http, хочешь через сокеты.
...
Рейтинг: 0 / 0
01.02.2022, 21:28
    #40131117
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Накопление символов в строку при KeyPress.
tavr2022,
у тебя что малинки на винде?
...
Рейтинг: 0 / 0
01.02.2022, 23:23
    #40131126
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Накопление символов в строку при KeyPress.
tavr2022,
авторРемиv эмуляции клавиатуры есть самый нормальный режим.
самый не нормальный,vb_sub верное решение предлагает, а так - будет полный геморрой.
...
Рейтинг: 0 / 0
02.02.2022, 07:57
    #40131146
tavr2022
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Накопление символов в строку при KeyPress.
vb_sub
tavr2022,
у тебя что малинки на винде?


Нет. Но секасом с COM портом через USB заниматься как то не хочется.
...
Рейтинг: 0 / 0
02.02.2022, 08:10
    #40131148
tavr2022
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Накопление символов в строку при KeyPress.
vb_sub,
авторсчитывание сканером это как будто ввели набор символов и нажали Enter.

Да вот именно это мне и нравится.

авторБез текстового поля не обойтись, поэтому если его не нужно показывать, то придётся делать его скрытым и следить все время, чтобы фокус был именно на нем. Не знаю прокатит ли это со скрытым TextBox.

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


авторТак же необходимо будет все время следить за раскладкой клавиатуры- сканирование при разных раскладках дает разный результат.
То есть или менять кириллицу на латиницу на ходу или делать запрет на её ввод.

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

авторСчитывать каждый символ и накапливать его не придется - нужно слушать событие нажатия Enter- и ты получишь всю последовательность штрихкода-после этого нужно очистить TextBox. С малинок куда хочешь, туда дальше и кидай- хочешь по http, хочешь через сокеты.

Малинки работают только как тонкие клиенты, сами они ничего не обрабатывают.
TextBox неудобен, длин шрихкода очень большая. Мерцание при перерисовке, доступен пользователю, постоянные потери фокуса, опять проверка на вводимое значение, конвертация в другую раскладку при необходимости.
...
Рейтинг: 0 / 0
02.02.2022, 09:34
    #40131171
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Накопление символов в строку при KeyPress.
tavr2022,
нет препятствий энтузиастам!
...
Рейтинг: 0 / 0
02.02.2022, 10:43
    #40131183
tavr2022
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Накопление символов в строку при KeyPress.
Это понятно. Мне советы нужны.

Даже хнен с ним.
Пусть это будет ТextBox.
Как мне не терять фокус?
Как мне не дать пользователю тама ручками шаловливыми что-то править?
И если форм у меня будет больше одной, мне надо где-то общая процедура по обработке всего этого, где ее размещать?
Писать код в самой форме это не есть хорошо.
...
Рейтинг: 0 / 0
02.02.2022, 10:53
    #40131184
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Накопление символов в строку при KeyPress.
tavr2022,
tavr2022Как мне не терять фокус?
Все время отслеживать его изменение и возвращать обратно
tavr2022Как мне не дать пользователю тама ручками шаловливыми что-то править?
Возможно спрятать где-либо Textbox
tavr2022И если форм у меня будет больше одной, мне надо где-то общая процедура по обработке всего этого, где ее размещать?
Это наименьшая из проблем, с которой ты при своем подходе столкнешься. Можешь размесить всю обработку в одном классе-сервисе и оттуда все использовать.
tavr2022Писать код в самой форме это не есть хорошо.
Можешь воспользоваться MVVM-подходом.
...
Рейтинг: 0 / 0
02.02.2022, 11:12
    #40131187
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Накопление символов в строку при KeyPress.
tavr2022
А вот этот геморой мне и хотелось бы избежать. Через поле я TextBox сделал.
Фокус вечно куда пропадает. Пользователь то мышкой дернет то винда там что подумает.
А особо умные пользователи пытаюсь проявить сообразительность, и что-то править

Это легко решается, как только поле теряет фокус, просто сфокусируй обратно.
делайте как вас советовали, через COM или используйте существующие либы. Ничего сложного в работе с COM портом нет, это не сложнее, чем работать с клавиатурой или файлом. В 90-2000 у всех были модемы и терминальный доступ по COM порту была норма, любой пользователь мог разобраться, как терминально зайти на BBS ^) в вашем случае это считай тоже самое. Все это взаимодействие заверните в сервис, который возвращает асинхронную операцию ReadAsync() и читайте данные с COM порта, подозреваю, что там не надо быть Шерлоком Холмсом, чтоб понять, что это за данные и как их прочитать. Но всё это уже написано, 100500%
...
Рейтинг: 0 / 0
02.02.2022, 11:13
    #40131188
tavr2022
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Накопление символов в строку при KeyPress.
vb_sub,

авторВсе время отслеживать его изменение и возвращать обратно.

Ну да есть событие Leave. Можно на него и привязаться. Как прошло, то сразу вернуть назад.
Или у меня в шрихкоде есть префикс, и через пресловутое событие KeyPress формы ловить как префикс проскочил, активировать нужный мне TextBox
Как вам второй вариант?

авторМожешь размесить всю обработку в одном классе-сервисе и оттуда все использовать.

Вот тут у меня и затык. В Дельфи можно было делать общие процедуры и функции в одном модуле. А тут такого нет полное ОПП.
Киньтесь примером коли не в тягость.
...
Рейтинг: 0 / 0
02.02.2022, 11:18
    #40131190
tavr2022
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Накопление символов в строку при KeyPress.
Roman Mejtes,

Ну нет у меня COM портов.
...
Рейтинг: 0 / 0
02.02.2022, 11:22
    #40131193
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Накопление символов в строку при KeyPress.
tavr2022
Вот тут у меня и затык. В Дельфи можно было делать общие процедуры и функции в одном модуле. А тут такого нет полное ОПП.
Киньтесь примером коли не в тягость.

Что бы затоков не было, надо мыслить в объектно-ориентированной парадигме, а не процедурной. Но не везде оно нужно, конечно.
...
Рейтинг: 0 / 0
02.02.2022, 11:26
    #40131195
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Накопление символов в строку при KeyPress.
tavr2022,
для "Честного знака" приложение пишешь?
...
Рейтинг: 0 / 0
02.02.2022, 11:34
    #40131200
tavr2022
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Накопление символов в строку при KeyPress.
vb_sub
tavr2022,
для "Честного знака" приложение пишешь?


Нет, у нас тут свой аттракцион.
...
Рейтинг: 0 / 0
02.02.2022, 12:42
    #40131224
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Накопление символов в строку при KeyPress.
Что-то я не пойму, зачем тут текстбокс.
Прочитал клавишу
- если символ начала - поставил флаг, что запись идет, и инициализировал переменную-накопитель
- если символ конца - сбросил флаг записи и выполнил действия
- в остальных случаях если флага записи нет - игнор, есть - добавляем в накопитель
...
Рейтинг: 0 / 0
02.02.2022, 12:44
    #40131225
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Накопление символов в строку при KeyPress.
Shocker.Pro,

это будет работать до тех пор пока его приложение в фокусе, если выбрать в фокусе какое-нибудь другое окно, габела. А если кот по клавиатуре пробежит? :D
...
Рейтинг: 0 / 0
02.02.2022, 13:03
    #40131227
tavr2022
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Накопление символов в строку при KeyPress.
Shocker.Pro
Что-то я не пойму, зачем тут текстбокс.
Прочитал клавишу
- если символ начала - поставил флаг, что запись идет, и инициализировал переменную-накопитель
- если символ конца - сбросил флаг записи и выполнил действия
- в остальных случаях если флага записи нет - игнор, есть - добавляем в накопитель


Блин я так и хочу. Как этот накопитель блин сделать?
...
Рейтинг: 0 / 0
02.02.2022, 16:41
    #40131280
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Накопление символов в строку при KeyPress.
tavr2022
Как этот накопитель блин сделать?
Код: c#
1.
a += b

так не подойдет?
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Накопление символов в строку при KeyPress. / 25 сообщений из 40, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]