![]() |
|
Модераторы: gambit, Partizan |
![]()
|
|
| shark1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 10.11.2007 Репутация: нет Всего: нет |
Помогите плиззз.Такая проблемка,сделал програмку для склада,прога работает так,загружается фаил в лист бокс,и потом человек в текст бокс считывает баркод с детали,если такой имеется то он стирается из файла если нет то Wrong!!!.Проблема в следующем,когда человек считывает баркод то это происходит очень медленно,а должно быть как пуля.Подскажите в чем проблема,где ошибка(за код сильно не ругайте,знаю что он корявенький).Зарание спасибо.Код:
|
|||
|
||||
| shark1 |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 10.11.2007 Репутация: нет Всего: нет |
Попробовал сделать вот так :
|
||||||
|
|||||||
| 1stain |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 486 Регистрация: 30.7.2007 Где: Киев - Харьков Репутация: 4 Всего: 40 |
shark1, ужасно извеняйусь за свою непроходимую тупость, но где в коде собственно считывание баркода?
-------------------- Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein) ![]() |
|||
|
||||
| shark1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 10.11.2007 Репутация: нет Всего: нет |
Попробовал сделать вот так :
if ((textBox1.Text.Length == lstFile.Items[i].ToString().Length) && (textBox1.Text.ToLower() == lstFile.Items[i].ToString().ToLower())) разделил проверки,ну еще чуток быстрее но все равно не то.Подскажите,спасибо. To 1stain : это не ты должен грешить на тупость а я,так что ... а баркод считывается здесь: textBox1.Text.ToLower() т.е у человека есть деталь с баркодом,и он с помощью баркод пистоля считывает баркод в textBox1.Спасибо. |
|||
|
||||
| 1stain |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 486 Регистрация: 30.7.2007 Где: Киев - Харьков Репутация: 4 Всего: 40 |
все равно не ясно, как происходит считывание баркода, ну да бог с ним.
имхо, лучше прочитать все строки из файла в List<String>, который биндим к контролу ListBox. Затем при получении новой строки с ридера он как я понял загоняется в текстбокс (Readonly), по событию TextChanged которого делаем
вобщем, примерно так з.ы. снова имхо: такие вещи лучше делать не через файлы, а через базы данных. Это сообщение отредактировал(а) 1stain - 29.11.2007, 15:58 Присоединённый файл ( Кол-во скачиваний: 3 )
WindowsApplication1.rar 65,80 Kb-------------------- Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein) ![]() |
|||
|
||||
| shark1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 10.11.2007 Репутация: нет Всего: нет |
Спасибо огромное за пример,только я его не могу к своему прикрутить.Если возможно и это не будет наглостью,можно я пришлю свой пример а вы его посмотрите пожалуста.Спасибо огромное.
Присоединённый файл ( Кол-во скачиваний: 4 )
Desktop.rar 14,17 Kb |
|||
|
||||
| shark1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 10.11.2007 Репутация: нет Всего: нет |
1stain помоги плиззз,замучился,не выходит не чего .Уже и так и так пробовал.Как сделать так чтоб textBox получал полный стринг,а то при вводе так выглядет что происходит проверка каждой цифры.Помоги плиззз.Спасибо.
|
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 11 Всего: 149 |
Баркод сканер подключается к порту клавы и эмулирует нажатие клавиш, скорее всего завершая ввод интером (13 код)
Тормозит первый метод Потому, что он вызывается при вводе каждой букоффки, а код довольно тяжелый. Решение -- ждать интер и запускать метод только после этого, как во втором обработчике Добавлено через 21 секунду Вот-вот |
|||
|
||||
| shark1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 10.11.2007 Репутация: нет Всего: нет |
ivashkanet ты прав 100%,так оно и задуманно чтоб человек не нажимал на Enter,но как ускорить считывание и проверку :( Как этого добится(Решение -- ждать интер и запускать метод только после этого, как во втором обработчике).Совсем мне плохо ,подскажите,спасибо.
|
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 11 Всего: 149 |
shark1, а длина этого баркода не постоянна? Есть же стандарты...
Добавлено через 3 минуты и 56 секунд Если не постоянна -- могу предложить ХАК (сразу говорю, это решение мне не нравится). Он заключается в том, что мы будем немножко ждать, прежде чем искать элемент в базе. Ждать, допустим, 0.1 сек. Это не совсем просто сделать (не создавая второй поток). Понадобиться флаг, цикл (ждущий 0,1 сек и выполняющий в себе Application.DoEvents()) |
|||
|
||||
| shark1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 10.11.2007 Репутация: нет Всего: нет |
ivashkanet длина баркода не постоянна,ну и если можешь давай попробуем,может так и будет нормально.Спасибо.
|
|||
|
||||
| 1stain |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 486 Регистрация: 30.7.2007 Где: Киев - Харьков Репутация: 4 Всего: 40 |
если сканер при окончании ввода имитирует нажатие кнопки энтер в текстбоксе, то зачем в таком случае обработчик TextChanged?
-------------------- Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein) ![]() |
|||
|
||||
| shark1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 10.11.2007 Репутация: нет Всего: нет |
ivashkanet если у тебя есть возможность посмотри мой пример,может ты подскажеш что не так.Спасибо.
Присоединённый файл ( Кол-во скачиваний: 1 )
Main.zip 10,78 Kb |
|||
|
||||
| ivashkanet |
|
||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 11 Всего: 149 |
Держи:
Добавлено через 1 минуту и 44 секунды
Меняя "сотню" нужно добиться, чтобы скан успевал произойти и пользователь не заметил задержки |
||||
|
|||||
| shark1 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 10.11.2007 Репутация: нет Всего: нет |
ivashkanet спасибо зделал как ты предложил :
но почемуто застряёт сдесь :( Выкидывает на Form_Wrong .
Добавлено через 9 минут и 51 секунду ivashkanet вот в чем проблема,он дает мне считать первый баркод,а на втором показывает ошибку :( ,подскажи,спасибо. |
||||
|
|||||
| shark1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 10.11.2007 Репутация: нет Всего: нет |
ivashkanet я код чуток поменял местами :
вроде бы побыстрее работает.Спасибо. |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 11 Всего: 149 |
Совсем не должно работать. Так как ты в любом случае ищешь элемент в таблице.
Рассказывай логику работы. По действиям: навели курсор туда-то, ввели баркод, нажали интер, удалили то что есть, ввлеи еще один... |
|||
|
||||
| shark1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 10.11.2007 Репутация: нет Всего: нет |
Логика такая,есть база в текстовом файле,загружаю ее в лист бокс,затем человек начинает считывать баркоды,должен считывать быстро,потому что это для склада прога,если он считывает и все правильно то номер кот. совпадает стирается из лист бокса и вносится в следующий(во временный),а если нет такого номера в лист боксе то Wrong !!!.В конце если все ок,то есть нопка ,нажал и все что было в временном текст боксе загружается в Access,а из текстового файла(из базы) стирается.Спасибо.
|
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 11 Всего: 149 |
Так, бизнеслогика понятна.
Меня интересует нажимается ли что-нить между двумя считываниями? Или они идут просто один за другим, а в случае если прога не реагирует пользователь нажимает интер чтобы сказать: "да, я ввел баркод, думай собака"? Тогда мой ХАК не подойдет (он работает только при одиночных считываниях). Есть еще идея: при формировании списка слов: а) можно вычислить всевозможные длины нужных баркодов и перед посимвольной проверкой сравнивать длину строки, а уже потом искать есть ли она. б) Вместо преребора всех значений листа лучше воспользоваться методом: lstFile.Items.IndexOf(textBox1.Text.ToLower()), учитывая то, что в списке все баркоды будут приведены к нижнему регистру в) Если же предыдущий пункт не даст ощутимой прибавки, есть вариант использовать хэш таблицу, тогда поиск элемента в листе будет выглядеть так: hashedList.ContainsKey(textBox1.Text.ToLower()) Удачи |
|||
|
||||
| shark1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 10.11.2007 Репутация: нет Всего: нет |
ivashkanet да ты прав все так и работает как ты предположил(они идут просто один за другим,и ни чего не нажимается)просто я отлавливаю Enter при считывании и курсор перескакивает в другой текст бокс,и все заново считали(споймал Enter)курсор перескачил в нужное место в textBox1 . т.д.
А куда это нужно вставить lstFile.Items.IndexOf(textBox1.Text.ToLower()). Спасибо. |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 11 Всего: 149 |
||||
|
||||
| shark1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 10.11.2007 Репутация: нет Всего: нет |
ivashkanet сделал вот так :
[code=csharp] bool next = false; bool notFound = true; private bool waitingForFullBarcode = false; private void textBox1_TextChanged(object sender, EventArgs e) { if (!waitingForFullBarcode) { // Сам момент ожидания waitingForFullBarcode = true; DateTime startWaitingTime = DateTime.Now; while (((TimeSpan)(DateTime.Now - startWaitingTime)).Milliseconds < 100) { Application.DoEvents(); } waitingForFullBarcode = false; // Подождали и поехали дальше notFound = true; base.OnTextChanged(e); if (next) { next = false; } lstFile.Items.IndexOf(textBox1.Text.ToLower()); notFound = false; return;code] скорость бешанная но больше не чего не делает(не убирает номер из лист бокса,еслли такой есть и т.д).Спасибо. Это сообщение отредактировал(а) shark1 - 4.12.2007, 11:06 |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 11 Всего: 149 |
shark1, красавец, ты еще текст своей любимой книжки (не по .Net ) сюда вставь.
Я же сказал, что это не проходит --- удаляем. Я не сказал буквально вместо. Надо было чуть подумать... lstFile.Items.IndexOf(textBox1.Text.ToLower()) -- возвращает bool: true -- нашел, false -- не нашел. Поэтому нужно проверять его ифом. Вот тебе код, должен работать:
И есть вопрос: во втором обработчике (кстати, .Net не гарантирует, что он вызовется после первого, так как не гарантирует очередность при вызове событий) ты проверяешь на "13-й" символ. Кто его вводит? |
|||
|
||||
| shark1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 10.11.2007 Репутация: нет Всего: нет |
ivashkanet я извеняюсь на этой строке :if (lstFile.Items.IndexOf(textBox1.Text.ToLower()))
ругается:Cannot implicitly convert type 'int' to 'bool' и не понимает что такое i.Спасибо. P.S:"13-й" символ это Enter на клавиатуре(его ни кто не вводит).Спасибо. |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 11 Всего: 149 |
shark1, включай думалку
Ну не тещу я каждый кусок кода, что пощу Заменить на
То что это интер я знаю. Я спрашиваю почему ты его проверяешь если его никто не вводит |
|||
|
||||
| thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 1 Всего: 65 |
ivashkanet, Держись! Мы с тобой! -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
| shark1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 10.11.2007 Репутация: нет Всего: нет |
Спасибо огромное ,все отлично работает.Огромное спасибо,извените что сразу не ответил,чуток приболел.
|
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 11 Всего: 149 |
shark1, замечательно. Заходи еще ;-)
P.S. Выздоравливай thomas, мы это сделали |
|||
|
||||
| shark1 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 10.11.2007 Репутация: нет Всего: нет |
ivashkanet спасибо тебе огромное, и тебе thomas:да вы это сделали.Так что всем спасибо за помощь.
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |