2011-10-28 6 views
1

for 루프가 사이트로 이동하여 양식에 게시됩니다. listbox의 모든 항목에 대해 사용자가 사이트에 데이터를 채우고 기다리 길 원합니다. 여기서 중요한 점은 '기다림'입니다.For 루프를 사용자 입력 대기로 만드는 방법?

제 질문은 : for 루프를 사용자 입력을 기다리는 것이 가능합니까? 나는했습니다

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

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

    } 

} 

:이 사이트에 제출을 클릭하는 코드입니다

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(); 
    } 
} 

:

내가 양식에 데이터를로드하기 위해 일하고 for 루프 또한 코드를 삽입하지 않고 for 루프를 만들었습니다. 예 : i ++에 대해서는 if 문을 사용하여 인터페이스를 구현했지만 인터페이스가 뒤떨어졌습니다.

+0

귀하의 질문은 정말하지 분명해. 당신이하고있는 일과하고 싶은 일을 더 잘 설명해주십시오. – Otiel

+2

Form.ShowDialog() –

+0

@Otiel Alright를 사용하십시오. 목록 상자가 있습니다. 목록 상자에 항목을 추가 할 수 있습니다. 목록 상자의 각 항목에 대해 내 프로그램이 사이트로 이동하여 미리 정의 된 정보를 채 웁니다. 이 프로그램이 사용자가 captcha를 채울 때까지 기다린 다음 for 루프가 목록의 다음 항목으로 이동하기 전에 인터페이스에서 제출 단추를 클릭합니다. – user1017524

답변

1

사용자 입력을 기다리는데 for 또는 while 루프를 수행하는 것은 좋은 해결책이 아닙니다. 그렇게하지 마십시오. 프로그램이 루프에서 빠져 나오기를 기다리는 동안 프로그램이 계속 작동합니다. 대신 이벤트를 사용하여 솔루션을 찾아야합니다.

우리가 작업하고있는 목록 상자 항목의 인덱스를 보유하고 전역 변수 유무 : 당신은 귀하의 질문에 코멘트에서 제안 된 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

관련 문제