2017-11-19 29 views
0

geckowebbrowser를 사용하여 C#의 webbrowser 응용 프로그램에서 작업 중입니다. 여기에 문서를 찾은 것보다 탐색 할 수있는 URL을 제공합니다. 이 후 나는 텍스트 상자에 몇 가지 값을 입력하고 버튼을 클릭하십시오. 이제 heres가 내 문제입니다. 이 시점에서 버튼을 클릭 한 후 다시 documentcompleted 이벤트를 감지하고 뭔가를 원합니다. 이제는 어떻게 하나의 이벤트와 하나의 이벤트 핸들러를 사용하여 다른 태스크를 수행 할 수 있습니까?geckowebbrowser에서 여러 번 documentcompleted를 감지하고 싶습니다.

 geckoWebBrowser1.Navigate("www.facebook.com"); 
     geckoWebBrowser1.DocumentCompleted += new EventHandler<Gecko.Events.GeckoDocumentCompletedEventArgs>(geckoWebBrowser1_DocumentCompleted); 

     GeckoHtmlElement ge= (GeckoHtmlElement)geckoWebBrowser1.Document.GetElementById("u_0_5"); 
     ge.Click(); 

이 시점에서 나는 documentcompleted 이벤트를 감지하고 다른 작업을 수행하려고합니다. 이 작업을 수행하는 방법? 미리 감사드립니다.

+0

'geckoWebBrowser1_DocumentCompleted'에 3 행과 4 행을 입력하십시오. – cramopy

+0

나는 이미 그렇게했다. 명확하지 않을 수 있습니다. documentcomplete 이벤트를 얻은 후, 내 코드가 다른 document.So 지금은 다음 (또는 두 번째) 문서 완료 이벤트를 감지하고 다른 몇 가지 setattributes을 수행하고 클릭해야 탐색하려는 버튼을 클릭합니다. – user1244539

답변

0

그냥 클래스에 전역 변수를 추가

CurrentAction MyAction = CurrentAction.UNKNOWN; 

public enum CurrentAction 
{ 
    UNKNOWN = -1, 
    ClickButtonOne, 
    DoSomethingElse, 
    ClickTheOtherButton, 
    DoNothing, 
} 

그 전에 설정 첫 페이지에이 플래그를 이동 이렇게

MyAction = CurrentAction.ClickButtonOne; 
geckoWebBroser1.Navigate("site.com"); 

DocumentCompleted 경우 :

switch (MyAction) 
{ 
    case ClickButtonOne: 
     // find the button, check if not null 
     MyAction = CurrentAction.DoSomethingElse; // set a new action 
     button.Click(); 
     break; 
    case DoSomethingElse: 
     // Do something 
     MyAction = CurrentAction.ClickTheOtherButton; // set a new action 
     break; 
    case ClickTheOtherButton: 
     // this is the last page, so lets stop here 
     MyAction = CurrentAction.DoNothing; // specific action 
     break;   
    default: 
     Debug.Assert(false); break; 
} 

그래서 DocumentCompleted에 들어갈 때마다 코드가 다른 작업을 수행합니다. 필요한 동작을 설정하는 것을 잊지 마시고 null 체크를하십시오. 또한 NavigationError 이벤트를 구현하는 것이 좋습니다. 따라서 문제가 발생했는지 알 수 있습니다.