处理web浏览器控件的点击事件

本文关键字:事件 控件 web 浏览器 处理 | 更新日期: 2023-09-27 18:21:46

我想添加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文件里。它可以显示,但当我单击网络浏览器时,不会显示任何消息框。还有其他解决方案吗?感谢

处理web浏览器控件的点击事件

我使用ObjectForScripting来做这些事情。它允许JavaScript调用C#方法。让JavaScript对事件做出反应,这要容易得多,而且您不需要MSHTML。这里解释得很好。您需要using System.Runtime.InteropServices;才能使其工作,这样应用程序才能知道ComVisible Annotation。

你不必是一个JavaScript专业人士就可以使用它。例如:只需添加这样的按钮:

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

其将在CCD_ 4中调用名为CCD_。记住:您也可以使用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;
    }
}

webBrowser控件导航到本地文件。如果调用了完全加载的showRecent(),它将从数据库中获取信息,并使用id为"recent_cont"的div元素相应地创建按钮。