c# - 处理网页浏览器控件的点击事件

标签 c# .net browser powerpoint mouseclick-event

我想添加 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 时,没有显示消息框。还有其他解决办法吗? 谢谢

最佳答案

我正在使用 ObjectForScripting 来做这些事情。它允许 JavaScript 调用 C# 方法。让 JavaScript 对事件使用react,这要容易得多,而且您不需要 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;
    }
}

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

关于c# - 处理网页浏览器控件的点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17540644/

相关文章:

c# - 什么时候显式使用 delegate 关键字而不是 lambda 是更好的做法?

c# - 异步电子邮件发送未返回 View

.net - 在.net中创建透明 Angular PNG

javascript - 如何在 Javascript 中创建带有路径的临时浏览器端文件

javascript - 如何使用Javascript在浏览器上获取 'Ctrl +'行为?

c# - 如何从 typeName 字符串转换为泛型?

C#控制浏览器

python - 从另一个进程正在使用的文件中读取

c# - 为自定义版本控制实现 checkin / checkout

internet-explorer - Bootstrap 中的 IE 中没有圆边