JoaniSilva Ответов: 2

Как отправить каждый элемент из списка в функцию в C# ?


Привет, ребята, вот я снова иду!
У меня есть проект, который печатает вручную и автоматически, но сценарий нужно начать печатать из списка!

Я должен отправить итены, которые я хочу, в список в первичной форме, это прекрасно!
но прежде чем печатать каждый товар типа "1251000012", он проходит мимо события,которое получает свою информацию, такую как название продукта, цена, классификация и другие для печати!

number_TextChanged_1(object sender, EventArgs e)
{
  if(number.TextLenth >=10)
  {
    // start to attribute each number's information
  }
  if(checkbox_autoprint.Checked ==true)
  {
     button_print.PerformClick();
  }

}

What I have tried:


Я пытался сделать вот так...но пока ничего не вышло!
Я заметил, что этот процесс идет слишком быстро, не занимая достаточно времени, чтобы получить необходимую информацию от numbe...
информация об этих числах требуется Sql Server на облачном сервере и для ее получения требуется несколько миллисекунд

foreach(string n in mylist)
                {
                  number.text = l.toString();
                }


Следующий шаг должен быть вызван этим событием ниже...но это не так
number_TextChanged_1(object sender, EventArgs e)
{
  if(number.TextLenth >=10)
  {


Любая идея будет оценена по достоинству...спасибо, ребята!

2 Ответов

Рейтинг:
2

JoaniSilva

Привет, ребята, после того, как провели несколько часов triyng! У меня есть решение!

Все итены из списка являются токенами в форме 2 и загружаются в форму 1 публичным списком он работал нормально!

в Форме1 у меня был флажок, в котором использовалась автоматическая печать (когда пользователь справлялся со сканером штрих-кода)

Итак, о событии

private void cbxautoprint_CheckedChanged(object sender, EventArgs e)

Я поставил условие, чтобы проверить, есть ли еще итены в списке, если да, то я использовал это...

foreach (string number in Frm1.MyListClass.List)
  {
     var startTime = DateTime.UtcNow; 

         UserSet.Number = number; //UserSet.Number is on a public static class
         Counting_Numbers(1);     // it's a function to subtract -1 from the count   of the Frm1.MyListClass.List.Count and Set -1 to a UserSet.Number_Counter                                              
       

          while (DateTime.UtcNow - startTime < TimeSpan.FromSeconds(3))
               {
                                    
                btnautoprint.PerformClick(); //execute the printing performance

               }
                                                           
    }


Рейтинг:
0

phil.o

Здесь можно сделать несколько замечаний:

if(checkbox_autoprint.Checked ==true)

Вам никогда не нужно сравнивать булево с булевым; вы можете использовать первое булево непосредственно. Так:
if (checkbox_autoprint.Checked)

это и достаточно, и более элегантно.
----------
foreach(string n in mylist)
   {
   number.text = l.toString();
   }

Здесь вы никогда не используете строковую переменную foreach петля (nБолее того, вы продолжаете присваивать одно и то же значение (l.ToString()) к number.Text Что такое l в любом случае?
Что именно вы хотите сделать в этой части кода?
----------
Во время выполнения код внутри блока if никогда не выполняется:

Ну, это значит, что условие number.TextLenth >= 10 ложный.
Единственный способ узнать почему-это запустить проект в режиме отладки (из VS), поставив точку останова в начале обработчика событий и нажав клавишу F5. Как только выполнение достигает точки останова, оно приостанавливается, и вы должны выполнить код строка за строкой. Это позволяет точно проверить, какие значения удерживаются переменными.

Отладка-это далеко не необязательный навык, и вам следует заняться им довольно рано.
Во-первых, это заставит вас более точно определить критерии и ограничения; во-вторых, вы научитесь понимать выполнение кода, и это даст вам подсказки о том, как писать более эффективный код.

Может быть Расширенная отладка в Visual Studio[^] может быть хорошей отправной точкой.
----------
Когда вы используете TextChanged обработчик событий, он выполняется каждый раз, когда текст в элементе управления изменяется, то есть при каждом ударе клавиши.
Может быть, вы могли бы выполнить его только тогда, когда контроль будет полностью квалифицирован? В этом случае вы должны использовать Validating и Validated вместо этого события.
Но я не очень уверен, что полностью понял ваше требование по этому поводу.
----------
Надеюсь, все это имеет для вас смысл. Любезно.


JoaniSilva

Итак, Фил. О, я понял, что то, что вы написали о событии TextChanged, не может быть обработано в этом случае!
Я хотел бы получить каждый элемент из списка и установить его значение в число.Текст в каком номере.Текст - это элемент управления TextBox.

JoaniSilva

Итак, человек, я получил решение и разместил его ниже! если вы видите еще один элегантный способ сделать это, будьте свободны комментировать! спасибо за ваш намек на ваше решение! счастливой пятницы!