none
請問在WebBrowser加掛OnClick事件的方法 RRS feed

  • 問題

  • 各位新進好,請問一個問題

    就是如何在WebBrowser加掛OnClick事件的方法

    目前卡在 attachEvent 這邊就停住了,部分原始碼如下:

           private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                if (e.Url == webBrowser1.Url) 
                {
                    var doc = this.webBrowser1.Document;
                    //doc.Click += new HtmlElementEventHandler(document_Click);
                    var frames = doc.Window.Frames;
                    IHTMLDocument3 frameDoc = CorssDomainHelper.GetDocumentFromWindow(frames[0].DomWindow as IHTMLWindow2);
                    try
                    {
                        if (frameDoc.getElementById("TR0") != null)
                        {
                            //frameDoc.getElementById("TR0").onclick = TR_OnClick(frameDoc, "TR0");
                            frameDoc.attachEvent("click", new EventHandler(TR0_OnClick));
    
                            //MessageBox.Show(frameDoc.getElementById("TR0").innerText);
                        }
                        if (frameDoc.getElementById("TR1") != null)
                        {
                            //frameDoc.getElementById("TR1").onclick = TR_OnClick(frameDoc, "TR1");
                            frameDoc.attachEvent("click", new EventHandler(TR1_OnClick));
                            //MessageBox.Show(frameDoc.getElementById("TR1").innerText);
                        }
                    }
                    catch (Exception ex)
                    {
                        label2.Text = "Exception: " + ex.Message;
                    }
                }
            }
    
    
           public void TR0_OnClick(object sender, EventArgs e)
            {
                label2.Text = "點了!";
                var doc = this.webBrowser1.Document;
                var frames = doc.Window.Frames;
                IHTMLDocument3 frameDoc = CorssDomainHelper.GetDocumentFromWindow(frames[0].DomWindow as IHTMLWindow2);
                label2.Text = frameDoc.getElementById("TR0").innerText;
    
            }
    
            public void TR1_OnClick(object sender, EventArgs e)
            {
                label2.Text = "點了!";
                var doc = this.webBrowser1.Document;
                var frames = doc.Window.Frames;
                IHTMLDocument3 frameDoc = CorssDomainHelper.GetDocumentFromWindow(frames[0].DomWindow as IHTMLWindow2);
                label2.Text = frameDoc.getElementById("TR1").innerText;
    
            }

    其中,TR0跟TR1是Table下面的tr列,

    我想要目的是點了Table的某一列的時候能夠抓到該列的 innerText

    環境:VS2010

    謝謝大家!!

    2013年2月20日 上午 07:49

所有回覆

  • 處理tr的onclick事件可以參考這篇文章的做法:Adding an onclick event to a table row
    2013年2月20日 上午 08:23
  • 感謝您的回應

    由於我這個webbroswer載入的是一個跨網域的網頁,所以就沒辦法在該網頁加上任何code

    只能用類似 IHTMLDocument3 這種方式取到TR裡面的innerText

    顯在的問題只是不知道要如何以 IHTMLDocument3 的方式掛上 onclick 事件...

    謝謝您!!

    2013年2月21日 上午 12:07
  • 您好,
    請問有確定frame的內容都已load下來了嗎?
    HTML - How do I know when all frames are loaded?

    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2013年2月22日 上午 02:15
  • 謝謝亂馬客的回應

    有確定 frame 的內容已經有 load 下來了,

    因為 MessageBox.Show(frameDoc.getElementById("TR0").innerText);
    這行是可以正確顯示出 TR0 的內容

    但因為該內容是在 webBrowser1_DocumentCompleted 就會自動跳出來 MessageBox
    我希望能夠在使用者點了<tr>之後才顯示出來
    所以就請教 onclick 要怎麼掛上去

    PS:想掛在 <tr> 上,而不是整個 webBrowser上。

    謝謝您!!

    2013年2月22日 上午 03:54