이 너무 늦을 수 있지만 여기가 경우에 어쨌든 당신은 아직도 궁금하다 :
1 -는 HTMLElement div_result = webBrowser1.Document .GetElementById ("div_result"); 라인 # 1은 웹 페이지가로드되고 브라우저가 DocumentCompleted 이벤트를 호출 할 때 실행됩니다. 이벤트 핸들러에서 DOM 요소 "div_result"에 대한 포인터를 먼저 가져오고 div_result라는 HtmlElement 유형 변수를 지정합니다.
2 - div_result.AttachEventHandler ("onpropertychange", new EventHandler (resultEventHandler)); 라인 # 2 - "onpropertychange"이벤트를 등록하고 resultEventHandler 메소드를 리스너 메소드로 지정합니다.
웹 페이지의 버튼을 클릭 할 때마다 버튼이 제출되어 웹 페이지가로드되는 형태가됩니다. 그런데 버튼을 클릭 할 때 (게시 또는 가져 오기) 사용중인 게시 방법을 지정하지 않았습니다. 웹 페이지 다운로드가 완료되고 DOM 요소 트리가 생성되면 DocumentCompleted 이벤트가 호출됩니다. 당신은 DocumentCompleted 이벤트 핸들러 메서드는 위에서 설명한 지침을 수행했습니다.
버튼을 클릭 할 때마다 웹 페이지가 다시로드되고 onpropertychange 이벤트에 대한 이벤트 리스너가 다시 할당됩니다. 이벤트 리스너 만 할당하고 있습니다. 이벤트는 절대 호출되지 않습니다. 버튼을 클릭 할 때마다 정의됩니다. 당신은 첫번째 닭고기, 또는 계란 문제가 된 고전 있습니다. 그러나 귀하의 경우 치킨은 버튼 클릭 이벤트로 DocumentCompleted 메서드가 실행되어 메서드의 모든 변수 상태를 재설정하고 계란은 웹에서 버튼을 클릭하기 전에 DIV 요소의 onpropertychange 이벤트에 대한 포인터를 원합니다. 페이지. 구성되지 않은 DOM에서 포인터를 가져 오기 전에 이벤트 리스너를 htmlelement에 어떻게 할당합니까? DocumentCompleted 메서드가 포함 된 클래스에 Boolean 플래그 변수를 삽입하고 초기 상태를 설정합니다. div_result 변수를 DocumentCompleted 메서드 외부로 이동하면 범위가 확대되고 단추 클릭 이벤트에서 상태가 저장됩니다. 이렇게하면 div 요소에 대한 포인터가 생기고 웹 페이지가 처음 다운로드 될 때 onpropertychange 이벤트 리스너가 설정됩니다.DIV 요소의 onpropertychange 이벤트 리스너에 포인터를 한 번만 설정하려면 테스트를 추가하고 (다음 샘플 코드에 하나씩 넣음) 다음 번에 단추를 클릭하면 이벤트가 실행됩니다. 노트! 웹 페이지의 요소 나 이벤트에 대한 포인터를 저장 한 후에는 웹 페이지에 요소를 추가하거나 삭제하지 마십시오. 그렇지 않으면 DOM 트리에서 Element의 새 위치에 대한 포인터를 가져 오기 위해 DOM을 재분석해야합니다.
// 아래를 참조
나는 DIV에로드되는 데이터에 대한 자세한 정보가 필요 두 번째 질문에 대답하기 위해
class SomeClass
{
bool DocumentHasLoaded = false;
HtmlElement div_result = null;
//Constructor and other methods go here....
//Then change your DocumentCompleted method to look like this:
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (DocumentHasLoaded == false) // I prefer using a ! before the variable instead
{
DocumentHasLoaded = true; // You will have to create your own appropriately timed mechanism to reset this variable's state should you want to execute the whole process again.
div_result = webBrowser1.Document.GetElementById("div_result");
div_result.AttachEventHandler("onpropertychange", new EventHandler(resultEventHandler));
}
}
}
; 예 : 어디서 왔는지, 어떤 유형인지, 생각할 수있는 다른 관련 정보가 포함되어 있습니다.
"자식 요소의 innerText 또는 innerHTML을 변경해도 부모 요소에 대해 onpropertychange 이벤트가 실행되지 않습니다." 내용이 변경 될 때 DIV의 속성을 변경해야하기 때문에. http://msdn.microsoft.com/en-us/library/ie/ms536956(v=vs.85).aspx – aliassce