Visual C# Express 2010 (.NET Framework 4.0), Windows 7 32 비트를 사용하고 있습니다.어떻게 HTMLDocumentEvent onclick이 여러 번 발생합니까?
onclick 이벤트로 HTML 정보를 표시하는 WebBrowser 컨트롤과 ListItem 개체 만있는 WinForm 프로젝트를 만들었습니다.
내 목표는
코드
(예 : 텍스트 필드 태그 등으로) 클릭 된 HTML 문서 정보를 프로젝트를 실행하고 WebBrowser 컨트롤에 웹 사이트에서 텍스트 필드를 클릭하고 표시하는 것입니다namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private mshtml.HTMLDocument doc = null;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
object oUrl = "http://livemocha.com/";
object oEmpty = "";
myBrowser.Navigate(oUrl.ToString());
}
private void myBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
try
{
doc = (mshtml.HTMLDocument)myBrowser.Document.DomDocument;
mshtml.HTMLDocumentEvents2_Event iEvent = (mshtml.HTMLDocumentEvents2_Event)doc;
iEvent.onclick += new HTMLDocumentEvents2_onclickEventHandler(ClickEventHandler);
}
catch (UnauthorizedAccessException err)
{
Console.WriteLine("OOPS: " + err);
}
}
//event handler when user clicks mouse
//and just display info such as html tag and its attributes
private bool ClickEventHandler(mshtml.IHTMLEventObj e)
{
actionList.Items.Add("------- ClickEventHandler -----------");
actionList.Items.Add(e.type + " : " + e.srcElement.tagName + " : " + e.srcElement.outerHTML + " : " + e.srcElement.innerText + " : " + e.srcElement.id);
return true;
}
}//end class
}//end namespace
문제가 발생하는 동안 ListItem 개체는 ClickEventHandler에 의해 생성 된 동일한 출력을 표시합니다. 내가 검색 텍스트 필드에 www.google.com 단지 마우스 클릭으로 이동하는 경우 예를 들어, 출력은 다음과 같습니다 등등
----- ClickEventHandler ---------
click: INPUT <INPUT style=.....
----- ClickEventHandler ---------
click: INPUT <INPUT style=.....
----- ClickEventHandler ---------
click: INPUT <INPUT style=.....
합니다. 클릭 이벤트는 여러 번 발생합니다.
내가 여기에 예를 따랐습니다: 온 클릭 http://support.microsoft.com/kb/312777
내가 myBrowser_DocumentCompleted()를 생각했다가 호출 될 때 여러 번 어떻게 든하고 라인에 동일한 이벤트 핸들러를 추가,
iEvent.onclick += new HTMLDocumentEvents2_onclickEventHandler(ClickEventHandler);
그러나 HTMLDocumentEvents2_Event 방법 등()은 + = 또는 - = 만 허용하므로이 행을 변경할 수는 없습니다.
누구에게이 문제가 발생 했습니까?
UPDATE는
WebBrowser 컨트롤의 URL이 처음 www.msn.com
에 프로젝트가 실행될 때, documentCompleted 이벤트가 호출 설정 한 후 이벤트 핸들러를 클릭 추가되는 것을 나타냈다.
클릭 이벤트 처리기를 추가하는 다른 URL로 이동하는 FormLoad() 이벤트.
이제는 두 번의 클릭 이벤트 처리기가 있습니다.
또한 다른 URL로 갈 때마다 어떻게 든 클릭 이벤트 처리기가 추가되고 있습니다.
documentCompleted() event
, iEvent가 올바르게 지워지지 않았 음을 확신합니다. (코드를 살펴보면 documentCompleted() 이벤트 당 초기화되므로 ...)
중복 이벤트 핸들러를 추가 할 수있는 다른 사이트로 이동이의 Form_Load 같은데 ...? –
체격, 첫 번째, 나를 다른 사이트로 안내하는 form_load는 중복 클릭 이벤트 처리기를 추가합니다.하지만 문서가 없으면 무언가가 문서 완료 이벤트 처리기 안에 없기 때문에 여전히 이벤트 처리기를 추가합니다. 코드는 괜찮은 것 같습니다 .hmm –