2

所以我一直在做这个项目,我们在表单上有一个 WebBrowser 对象。该对象的目的是将 HTML 表单加载到其中以供查看,但在当前时间点,您可以编辑 HTML 表单的内容,这是不希望的。

我只想向用户显示这种 HTML 形式的信息,但不允许他们更改表单上的文本框或复选框或任何类似性质的东西。

我尝试使用导航事件并设置 e.cancel = true;。这甚至使控件无法加载页面。如果我将其设置为仅执行 e.cancel = true; 表单加载后,我仍然可以更改表单上的文本框等,因为它似乎只是随机调用了导航事件。

有谁知道让 WebBrowser 对象只读的方法?

干杯!

4

3 回答 3

2

您可以将contentEditable属性应用于Body文档的标签。

Document.Body.SetAttribute("contentEditable", false);

这将使您的文档对用户只读。

于 2014-05-27T13:14:15.567 回答
0

您可以尝试访问页面上的所有表单元素并在标签上设置只读属性。就像是:

var inputs = webBrowser1.Document.GetElementsByTagName("input");
foreach (HtmlElement element in inputs)
{
  element.SetAttribute("readonly", "readonly");
}

您显然必须对所有表单元素(选择等)重复该过程,但它应该可以工作。

于 2012-06-26T18:15:16.097 回答
0

我也遇到过这个问题。多亏了 steavy,我才能想出一个解决方案:

连接到DocumentCompleted事件(您可以在设计器中执行此操作):

myWebBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wb_procedure_DocumentCompleted);

然后在事件中使其只读:

private void myWebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    myWebBrowser.Document.Body.SetAttribute("contentEditable", "false");
}

我会在文档完全加载时执行此操作,因为我有时会遇到 a NullReferenceException,正文尚未加载并且行会抛出。

于 2019-02-11T13:19:24.353 回答