我有一个需要设置特定高度的网络浏览器控件。如果用户有少量文本,我希望Web浏览器很短。如果用户输入了很多文本,那么我需要网页浏览器更高。
如何从WebBrowser中找到渲染文本的高度?
我看到了Getting the page height from a C# web browser control,但认为有更好的方法。
更新
我正在设置浏览器的文本:
webBrowser1.DocumentText = value;
设置此值后,我可以检查webBrowser1.Document.Body及其null。我也可以得到文件的所有孩子,但没有人返回。
我是否设置了正确的属性?
答案 0 :(得分:3)
我在webBrowser.DocumentText中注意到的一点是,在设置之后你不一定能“立即”获得它的价值。
webBrowser1.DocumentText = "Some Text";
labelHtml.Text = webBrowser1.DocumentText
这不会产生可预测的结果,因为webbrowser控件可能尚未完成渲染文本。如果它反复运行,并且“Some Text”是一个变量,您将看到“labelHtml”很快就会与浏览器控件中的内容不同步。 (更复杂的“Some Text”是自然渲染所需的时间越长。)
如果您使用WebBrowser控件的 webBrowser1_documentCompleted 事件处理程序来获取DocumentText,那么您应该没问题。
private void setText(string htmlText)
{
webBrowser1.DocumentText = htmlText;
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
label1.Text = webBrowser1.DocumentText;
}
label1现在将包含您为Web浏览器提供的内容...
答案 1 :(得分:2)
作为该问题的答案:
找到BODY标记并获取该元素的OffsetRectangle.Bottom。这将为您提供页面的高度。
我认为不需要更好的方式,对我来说似乎相当容易。
webBrowser1.DocumentText会返回任何内容吗?您的网站包含正文标记,对吗?
答案 2 :(得分:0)
我认为有理由以另一种方式做到这一点......
引用的文章“从C#Web浏览器控件获取页面高度”使用了紧凑框架API中不存在的System.Windows.Forms.HtmlElementcollection。我正在寻找在.NET CF中工作的解决方案。出于这个原因,我会对另一种解决方案感兴趣。