处理Web浏览器控件的单击事件
我想添加webBrowser控件的click事件。 这是我的代码。
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时,没有显示消息框。 还有其他解决方案吗? 谢谢
我正在使用ObjectForScripting
来做这些事情。 它允许JavaScript调用C#-Method。 让JavaScript对事件做出反应,这样更容易,而且你不需要MSHTML。 这里很好地解释了 。 您将需要using System.Runtime.InteropServices;
为了它的工作,所以应用程序知道ComVisible-Annotation。
您不必是JavaScript-pro就可以使用它。 例如:只需添加如下按钮:
它将在showPpt
中调用名为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 status = Center.DB.GetUIStatus(); string html = ""; foreach (DaoStatus st in status) { html += ""; } divRecent.InnerHtml = html; } }
webBrowser
控件导航到本地文件。 如果调用了满载的showRecent()
,它将从数据库获取信息,并使用id为“recent_cont”的div-Element相应地创建按钮。