2013-07-09 129 views
1

我想添加webBrowser控件的點擊事件。這是我的代碼。處理網頁瀏覽器控件的點擊事件

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsFormsApplication2 
{ 
    public partial class Form1 : Form 
    { 
     HtmlDocument htmlDoc; 
     public Form1() 
     { 
      InitializeComponent(); 
      OpenFileDialog open = new OpenFileDialog(); 
      open.ShowDialog(); 
      this.webBrowser1.Navigate(open.FileName); 

     } 

     private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
     { 
      if (webBrowser1.Document != null) 
      { 
       htmlDoc = webBrowser1.Document; 
       htmlDoc.Click += new HtmlElementEventHandler(htmlDoc_Click); 
      } 
     } 
     private void htmlDoc_Click(object sender, HtmlElementEventArgs e) 
     { 
      MessageBox.Show("Click"); 
     } 

    } 
} 

我希望它能夠顯示一個.ppt文件。可以顯示,但是當我點擊webBrowser時沒有顯示消息框。還有其他解決方案嗎? 感謝

+0

你可以找到答案在http://stackoverflow.com/questions/9110388/web-browser-control-how-to-capture-document-events – srsyogesh

+0

謝謝,但它不能解決我的問題。我無法在您提供的鏈接中使用mshtml。 – tonylin

+0

是否有任何特殊的原因,因爲你不能使用這個庫? – srsyogesh

回答

7

我用ObjectForScripting做這類事情。它允許JavaScript調用C#方法。讓JavaScript對事件作出反應,這更容易,而且不需要MSHTML。這很好地解釋了here。您需要使用using System.Runtime.InteropServices;才能運行,以便該應用程序知道ComVisible-Annotation。

您不必是一個JavaScript專業人員就可以使用它。例如:只需添加一個按鈕這樣的:

<button onclick="javascript:window.external.showPpt('test.ppt');">Click me</button> 

這將調用一個在ObjectForScripting命名showPpt方法。請記住:您也可以使用C#創建HTML。這樣您可以將信息存儲在文檔中。這裏是一個完整的例子:

public partial class frmBrowser : Form 
{ 
    HtmlDocument doc; 

    [ComVisible(true)] 
    public class ScriptManager 
    { 
     private frmBrowser mForm; 

     public ScriptManager(frmBrowser form) 
     { 
      mForm = form; 
     } 

     public void recall(string statusID) 
     { 
      mForm.RestoreStatus(statusID); 
     } 
    } 

    public frmBrowser() 
    { 
     InitializeComponent(); 
     this.webBrowser.ObjectForScripting = new ScriptManager(this); 
     string url = "file:///" + Application.StartupPath + "\\start\\start.html"; 
     this.webBrowser.Navigate(url); 
    } 

    private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
     doc = webBrowser.Document; 
     showRecent(); 
    } 

    private void showRecent() 
    { 
     HtmlElement divRecent = doc.GetElementById("recent_cont"); 
     List<DaoStatus> status = Center.DB.GetUIStatus(); 
     string html = ""; 
     foreach (DaoStatus st in status) 
     { 
      html += "<button onclick=\"javascript:window.external.recall('" + st.ID + "');\">" + st.Name + "</button>"; 
     } 
     divRecent.InnerHtml = html; 
    } 
} 

控制導航到本地文件。如果調用完全加載showRecent(),它將從數據庫獲取信息,並使用ID爲「recent_cont」的div-Element相應地創建按鈕。

相關問題