繁体   English   中英

WCustom滚动条未出现在WebBrowser控件上

[英]WCustom scrollbars not appearing on WebBrowser control

我正在尝试使滚动条与Web浏览器控件一起使用。 但是,由于我将使用它来显示自定义消息框的消息,因此我不希望滚动条出现,即使不需要它也是如此-这似乎是默认情况。 为了避免这种情况,我决定禁用该控件上的滚动条,而是使用另一个控件(如Panel)上的滚动条。 这样,它们只会在浏览器页面的内容太大而无法容纳时出现。

尽管我已经阅读了很多文章,即使在StackOverflow上,这似乎也是一个有效的解决方案,但效果还不太好。 一个示例是当我尝试在此处使用解决方案时:

Panel控件中包含的WebBrowser控件的滚动问题

好像在Web浏览器中禁用了滚动条,它也不会让面板使用滚动条。 在设计模式下进行测试时似乎就是这种情况。 为了解决这个问题,我尝试在面板内的Web浏览器后面添加一个图片框。 它在设计模式下有效(调整图片框和Web浏览器的大小会导致面板启用其滚动条),但在运行时不起作用(我添加了代码以使图片框更改为Web浏览器控件的大小-它本身总是会调整大小以适合可滚动内容的大小。

我还尝试根据ScrollableRectangle的大小是否大于控件的大小,以编程方式启用和禁用Web浏览器的滚动条。 从理论上讲,这是可以的,除非它似乎在每次ScrollbarsEnabled属性更改时都清除了控件中的所有文本,从而将其更改回没有滚动条。

我正在使用以下代码执行此操作,只要在控件中按下某个键,该代码就会被有效调用:

if (Output.Document.Body != null)
{
    if (Output.Document.Body.ScrollRectangle.Size.Height > Output.Size.Height
            || Output.Document.Body.ScrollRectangle.Size.Width > Output.Size.Width)
        Output.ScrollBarsEnabled = true;
    else
        Output.ScrollBarsEnabled = false;
}
else
    Output.ScrollBarsEnabled = false;

还需要注意的是,我还需要在应用程序中使用的HTML编辑器解决方案,因此理想情况下,任何解决方案都不会依赖页面加载事件等,因为这些似乎不会在网络浏览器触发时触发将设计模式设置为on(将其用作HTML编辑器需要此模式)。 但是,在这种特殊情况下,如果没有更好的解决方案,我可以重新启用默认滚动条。

编辑:明确地说,我不是在谈论HTML内容内的任何滚动条-这无关紧要,因为HTML仅用于允许灵活地设置文本格式。 我只在谈论浏览器控件本身的滚动条。

任何帮助,不胜感激。 谢谢!

我最终在不久前找到了解决方案,但忘了在这里发布。 基本上,我所做的是首先默认启用滚动条,以便它们可以正常工作,尽管始终会出现。 然后,我创建了一个面板控件,并将其大小设置在Web浏览器控件右侧显示的非活动滚动条的顶部。

接下来,我更改了滚动条面板的锚点,以使顶部,底部和右侧始终与窗体的大小对齐,因此,由于浏览器控件的所有边缘也都被锚定,因此其大小也随之固定。

然后,我添加了一些代码来检查ScrollRectangle的大小,并将其与浏览器的大小进行比较,如果发现它的高度或宽度更大,则使盖板不可见,否则将其留在原处。

以下是相关的代码段:

            //If still bigger, set scrollbars:

            if ((Output.Document.Body.ScrollRectangle.Size.Height > Output.Size.Height) ||
                Output.Document.Body.ScrollRectangle.Size.Width > Output.Size.Width)
            {
                ScrollPanel.Visible = false;
                ScrollPanel.Enabled = false;
            }

希望这对以后的人有所帮助,在我发现一种效果很好的方法之前,采取了几种不同的方法。

我决定对盛的答案(当我获得足够的声誉时)是,首先,他是唯一可以回答的人,其次,当我考虑使用某种调用来尝试启用滚动条时,他的信息对我有帮助在运行时。 尽管我发现我的解决方案更简单且同样有效。

为时已晚。 创建Web浏览器时,将调用IDocHostUIHandler.GetHostInfo,并且WebBrowser的实现根据其ScrollBarsEnabled属性的值设置DOCHOSTUIFLAG_SCROLL_NO或DOCHOSTUIFLAG_FLAT_SCROLLBAR标志。

我建议您在创建Webbrowser控件的窗口之前将ScrollBarsEnabled设置为false。

如果您不希望显示特定元素(例如body,div或textarea)的滚动条,则可以将其样式设置为overflow ='hidden',或使用特定于元素的滚动属性,例如doc.Body.SetAttribute (“滚动”,“否”)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM