我使用的是Visual C#Express 2010(.NET Framework 4.0),Windows 7 32bit。如何使HTMLDocumentEvent onclick多次啓動?
我創建了WinForm項目,它只有WebBrowser控件和ListItem對象,通過onclick事件顯示html信息。
我的目標是要運行的項目,然後單擊文本框在網站WebBrowser控件和顯示已經被點擊(如文本字段標籤等)
代碼
html文件信息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方法類似的onclick ()只接受+ =或- =所以我不能真的改變這一行。
有沒有人遇到過這個?
UPDATE
想通WebBrowser控件URL初始設置爲www.msn.com
和項目運行時,documentCompleted事件稱爲一次它增加點擊事件處理程序。
然後導航到另一個URL添加單擊事件處理程序的FormLoad()事件。
所以現在有2個點擊事件處理程序存在。
此外,每當我去到不同的URL,不知何故點擊事件處理程序正在添加。
所以我很確定裏面的documentCompleted() event
,iEvent沒有正確清除。(通過查看代碼,它是通過documentCompleted()事件初始化的,所以它不應該有這種行爲,儘管...)
看起來這其中的Form_Load導航到另一個站點可能會添加重複的事件處理程序...? – 2011-03-23 02:08:06
算了一下,首先, form_load指向我另一個網站是添加重複的點擊事件處理程序,但即使沒有它,它仍然添加事件處理程序,因爲一些不正確的內部文檔完成事件處理程序。看起來像代碼是好的雖然..hmm – 2011-03-23 02:28:19