2011-10-28 102 views
1

我有一個for循環進入一個網站併發布到它的表單。對於listbox中的每個項目,我都希望它等待用戶填寫數據到站點,然後移動。這裏的關鍵是'等待'。如何讓循環等待用戶輸入?

所以我的問題是:是否有可能使for循環等待用戶輸入?

這是for循環,我才能將數據加載到形式工作:

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聲明使其繼續存在,但滯後於我的界面。

+0

你的問題真的不清晰。請更好地解釋你在做什麼以及你想做什麼。 – Otiel

+2

使用Form.ShowDialog() –

+0

@Otiel好的。我有一個列表框。在列表框中,我可以添加項目。對於列表框中的每個項目,我的程序將轉到該站點並向其中填充預定義的信息。我希望程序等待用戶填寫驗證碼,然後在for循環移動到列表中的下一個項目之前單擊我的界面上的提交按鈕。 – user1017524

回答

1

這不是一個好的解決方案,可以使forwhile循環等待用戶輸入。 不要這樣做。您的程序將在等待條件退出循環時持續工作。相反,您應該使用事件或其他方式找到解決方案。

如果你不想用你的問題的意見提出的Form.ShowDialog()的解決方案,你能想出這樣的事情:

有擁有我們正在列表框項的索引的全局變量:

int currentItemIndex; 

Submit按鈕添加一個Click事件。當用戶點擊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 
} 

,並在開始調用一個方法(被處理的第一listBox項目之前,用戶不能在Submit點擊):

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

哇,非常感謝完整的代碼^。^ – user1017524