我想添加 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/