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

时间:2009-11-25 16:27:25

标签: c# .net browser scroll panel

我有一个.Net Panel控件,它包含一个WebBrowser的子控件。我不会理解我这样做的原因,但它与打印控件有关。面板控件的AutoScroll属性设置为“true”,我正在调整WebBrowser的大小以适应其自己的内容(通过使用NavigateComplete2事件触发时WebBrowser的.Document.Body.ScrollRectangle.Size属性)。这样,面板上的滚动条就会出现,您可以上下滚动面板,以便能够看到WebBrowser的内容。

问题在于,当您向下滚动以查看WebBrowser底部的内容然后单击它时(可能您单击html中的链接),面板会跳回到顶部而链接不会采取行动。

请任何人帮助我了解正在发生的事情以及如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,也有Panel内的WebBrowser。这是我正在使用的解决方案(我在stackoverflow上找到了其他地方):

class AutoScrollPanel : Panel
{
    public AutoScrollPanel()
    {
        Enter += PanelNoScrollOnFocus_Enter;
        Leave += PanelNoScrollOnFocus_Leave;
    }

    private System.Drawing.Point scrollLocation;

    void PanelNoScrollOnFocus_Enter(object sender, System.EventArgs e)
    {
        // Set the scroll location back when the control regains focus.
        HorizontalScroll.Value = scrollLocation.X;
        VerticalScroll.Value = scrollLocation.Y;
    }

    void PanelNoScrollOnFocus_Leave(object sender, System.EventArgs e)
    {
        // Remember the scroll location when the control loses focus.
        scrollLocation.X = HorizontalScroll.Value;
        scrollLocation.Y = VerticalScroll.Value;
    }

    protected override System.Drawing.Point ScrollToControl(Control activeControl)
    {
        // When the user clicks on the webbrowser, .NET tries to scroll to 
        //  the control. Since it's the only control in the panel it will 
        //  scroll up. This little hack prevents that.
        return DisplayRectangle.Location;
    }
}

答案 1 :(得分:0)

尝试在包含的面板和WebBrowser控件上将TabStop设置为false。这对我有用。这样做的原因是,如果它被设置为想要成为一个tabstop,它将使第一次点击事件意味着它正在获得焦点。然后重置滚动条位置......不确定为什么会这样做......

但是,在导航到新页面时,您需要手动重置滚动条位置......

这是我使用的。 是的,这是一个黑客攻击。

    private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
    {
        webBrowser1.TabStop = true;
        webBrowser1.Focus();
        webBrowser1.TabStop = false;
    }