Как сделать так, чтобы цикл ожидал ввода пользователя? - PullRequest
1 голос
/ 29 октября 2011

У меня есть цикл for, который идет на сайт и публикует его формы.Для каждого элемента в listbox я хочу дождаться, пока пользователь заполнит данные на сайте, а затем переместиться.Ключевым моментом здесь является «ожидание».

Итак, мой вопрос: возможно ли сделать цикл for для ожидания ввода пользователя?

Это цикл for Iя работаю для того, чтобы загрузить данные в формы:

if (webBrowser1.DocumentText.Contains("Welcome"))
{   
    for (int i = 0; i < listBox4.Items.Count; i++ )
    {

        listBox4.SetSelected(i, true);
        listBox5.SetSelected(i, true);
        //coded to submit to form

        Application.DoEvents();
    }
}

Это код, чтобы нажать кнопку отправить на сайте:

Application.DoEvents();
foreach (HtmlElement webpageelement in allelements)
{

     if (webpageelement.GetAttribute("value") == "Submit")
     {
         webpageelement.InvokeMember("click");
         Application.DoEvents();

     }

 }

Я также пытался сделать for цикл без кода, чтобы он продолжался.Например: i ++ и сделайте оператор if, чтобы он продолжался, но это отстало от моего интерфейса.

1 Ответ

1 голос
/ 29 октября 2011

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

Если вы не хотите использовать решение Form.ShowDialog(), предложенное в комментариях к вашему вопросу, вы можете придумать что-то вроде этого:

Иметь глобальную переменную, которая содержит индекс элемента listBox, над которым мы работаем:

int currentItemIndex;

Добавьте событие Click на кнопку Submit. Когда пользователь нажимает Submit, он вызывает метод, который обработает следующий элемент listBox:

private void buttonSubmit_Click(Object sender, EventArgs e) {
    // Process next listBox item
    ProcessNextItem();
}

Метод, который обрабатывает следующий элемент listBox:

private void ProcessNextItem() {
    currentItemIndex += 1;
    if (currentItemIndex >= listBox.Items.Count) {
        // We have gone through all listBox items

        // Do nothing
    } else {
        // Fill predefined information to the website
        website.SomeField = listBox.Items[currentItemIndex].SomeField; // Whatever you do to fill predefined information
}

И вызывать метод при запуске (пользователь не нажимает Submit до обработки первого элемента listBox):

private void Start() {
    currentItemIndex = -1;
    ProcessNextItem();
}
...